Es heisst uint16_t
nein wenn ichs so mache hat er ein problem mit dem "uint"
mfg
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Es heisst uint16_t
Disclaimer: none. Sue me.
Schau mal ins Wiki, da hab ich was dazu geschrieben:
UART mit avr-gcc. Kannst es gleich mal auf Herz und Nieren testen![]()
Disclaimer: none. Sue me.
Ja danke mit ui9nt16_t gehts.
@Sprintersb: Das ist aber nicht für nen mega128 d.h. dann müsste ich es wieder komplett umstricken da mache ich lieber mit meinem jetzigen weiter.
Aber trotzdem danke.
MFG
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Was geht denn nicht auf ATmega128?
Die Anzahl der Stopbits ist anzupassen. Und dein USBS find ich auch nirgendwo... Ansonsten sollte das für ATmega gehen.
Disclaimer: none. Sue me.
So jetzt habe ich das programm mal getestet.
Eigentlich laüft es soweit. Nur irgendwie weiss ich nicht so richtig was ich da eingeben muss damit er zb. ein ganzes Wort sendet.
wenn ich die zwei sende kommt ein smiley an und wenn ich die drei sende dann kommt ein herz an.
Mfg
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Also ich habe das jetzt so gelöst:Code:#include <inttypes.h> #include <avr/io.h> #include <avr/signal.h> #include <string.h> #define F_CPU 16000000 #define UART_BAUD_RATE 9600 #define UART_BAUD_SELECT (uint16_t)(F_CPU/(UART_BAUD_RATE*16l)-1) void USART_Init (unsigned int baud) { /* Set baud rate */ //UBRR0H = (unsigned char)(baud>>8); //UBRR0L = (unsigned char)baud; UBRR0H = UART_BAUD_SELECT >> 8; UBRR0L = UART_BAUD_SELECT; /* Enable reciever and transmitter */ UCSR0B = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit*/ UCSR0C = (1<<USBS)|(3<<UCSZ0); } void USART_Transmit (unsigned char data) { /* Wait for empty transmit buffer */ while(!(UCSR0A & (1<<UDRE))) ; /* Put data into buffer, sends the data */ UDR0 = data; } //------------------------------------------------------ void send_string(char wort[]) { unsigned int index=0; while(wort[index] != '\0') { USART_Transmit(wort[index]); index++; } return; } //---------------------------------------------------------- unsigned char USART_Recieve(void) { /* Wait for data to be recieved */ while (!(UCSR0A & (1<<RXC))) ; /* Get and return recieved data from buffer */ return UDR0; } long i; int main(void) { DDRC = 0xff; //USART aktivieren mit einer Baudrate von 9600 Baud USART_Init(9600); //Endlosschleife for(;;) { PORTC=0x01; for(i=0 ; i<160000 ; i++){} PORTC=0x00; for(i=0 ; i<160000 ; i++){} //2 über USART verschicken send_string("Hallo"); USART_Transmit(3); } }
Ich meinte das man zb für UBRRH -> UBRR0H schreiben muss das steht nirgendwo ausser in diesem thread. Ich denke das es für nen anfänger irgendwie zu schwer ist mit deiner variante wobei sie sicherlich gut ist. Sie ist nur nicht speziell genug
aber man kann das ja auch nicht für jeden controller schreiben.
Jetzt habe ich nur noch ein problem, ich möchte das nachjedem sende zyklus eine neue reihe begonnen wird.
mfg danielsan
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Du must die einzelnen Zeichen schicken. Ich habs ins Wiki dazugemacht.
Disclaimer: none. Sue me.
Doch, das steht im Datenblatt des jeweiligen ControllersWie gesagt, die Codebeispiele sind mit Vorsicht zu genießen, zumal die meist für den IAR Compiler gemacht sind.
Ein weiteres Beispiel dafür ist, dass beim Mega128 die ISP Pins nicht auf MOSI, MISO, etc. liegen, wie das bei vielen anderen ATMegas der Fall ist. Das findet man eben auch nur im Datenblatt. In den Appnotes zum ISP von Atmel steht das auch nicht so direkt drin.
Neu Zeile:
USART_Transmit('\n');
Ok, das war eher als Vorlage gedacht um mal ein Beispiel zu haben, wie es prionzipiell geht, und weniger als Fix-Fertig-Lösung zum reinkopieren ins Programm. Das wirst du eh kaum finden...
Disclaimer: none. Sue me.
Lesezeichen