Hi, ich hab ein kleines problem beim Senden über das UART des Mega16. Ich habe das eigendlich so gemacht wie es im AVR-GCC Tutorial vorgeschrieben ist nur die entsprechenden Register gegen die Richtigen ausgetauscht so sieht der source aus #include <avr/io.h> #include <stdarg.h> #include <ctype.h> #include <string.h> #define F_CPU 8000000 // 16Mhz #define UART_BAUD_RATE 9600 // Baud 9600 // Berechnen des Inahltes des UBBRL Registers #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1) // Datentypedefinieren typedef unsigned char BYTE; typedef unsigned short WORD; // Funktionsprototypen void UartInit (void); void UartWrite (BYTE c); int main (void) { // Initalisieren des UARTs UartInit (); //for (;;) { // sende ein t outp ('t',UDR); //} } void UartInit (void) { //UART Control Register Laden outp ((1 << TXEN), UCSRB); // Baudrate setzen outp ((BYTE) UART_BAUD_SELECT, UBRRL); } Der MAX232 Arbeitet richtig und die Signale die rauskommen kommen auch am pin 2 des kabels an. Also an der Hardware kanns eigendlich nicht leigen ... ich benutze im moment noch den internen Oszilator mit 8Mhz ) Moritz Veit
Was kommt denn am PC an? - wenn nur verstümmelte zeichen ankommen deutet das darauf hin, dass deine UART-Frequenz nicht ganz stimmt. Wenn du ein OSZI hast, kannst du auch mal prüfen ob was herauskommt. Noch was: bevor du ein zeichen in das sende-Register schreibst, solltest du prüfen ob es leer ist. Also vorher UDRE im UCSRA auf log. 1 testen und dann erst byte in register schreiben. Ich schreibe das immer so: void send_char(unsigned char zeichen) { while(!(UCSRA&(1<<UDRE))); UDR=zeichen; } Gruß, Florian
HI, es kommt leider gar nichts am PC an. mit dem Oszi hab ich es schon durchgescheckt es kommt ein komisches signal an das nicht grad nach ne com signal aussieht ist ne runde aufsteigende flanke und dann ne steile abfallende. Gestern ahtte ich auch das Phenomen das das signal so ausgesehen hat : - -- - -- - -- - -- - -- - -- - -- - mfg Moritz
HI, ich habs es lag nicht am programm sonder an der Hardware ;-) Jetzt funktioniert es einwand frei g Trotzdem danke für dei antworten. Moritz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.