Hallo! Habe ein Problem mit dem Microcontroller ATMEGA 8, ich habe ihn bereits erfolgreich mit einer Demo-Version von CodeVision so programmiert, dass er mir jedes Zeichen, das ich mittels UART übertragen will, richtig überträgt. Allerdings überträgt er mir wenn ich mit dem AVR-Studio programmiere (GCC-Plugin) nicht die richtigen Zeichen. In einem Terminal Programm sehe ich nur sowas: "eeueeuueeuueeuueeuueeueeuueeuu" usw.usw. wenn ich eigentlich lauter "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" übertragen will. Wisst ihr, was das Problem dabei sein kann? der Programmcode ist 1:1 von dem CodeVision Assistenten übernommen und lautet wie folgt: #include <avr/io.h> // Standard Input/Output functions #include <stdio.h> // Declare your global variables here int main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x17; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; while(1) { while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ { } UDR = 'z'; /* schreibt das Zeichen x auf die Schnittstelle */ } /* wird nie erreicht */ return 0; }
Martin Wührer wrote: > der Programmcode ist 1:1 von dem CodeVision Assistenten übernommen Das ist schon mal das erste Problem. Ich hab keine Lust, jetzt im Datenblatt nachsehen zu müssen, was Du da überhaupt konfiguriert hast... > und lautet wie folgt: > [...] > UCSRA=0x00; > [...] > UBRRH=0x00; > UBRRL=0x17; UBRR = 0x17 bei nicht gesetztem U2X => F_CPU = 3,6864 MHz. Hast Du die tatsächlich? Hast Du die Fusebits richtig gesetzt? Die Symptome sehen mir nämlich verdächtig nach zu großer Baudraten-Abweichung aus.
Martin Wührer: > Programm sehe ich nur sowas: "eeueeuueeuueeuueeuueeueeuueeuu" usw.usw. > wenn ich eigentlich lauter "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" übertragen > ... > UDR = 'z'; /* schreibt das Zeichen x auf die Du kannst keine "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" sehen, höchstens "zzzzzzzzzzzzzzzz". Was machst du wirklich?
Stefan "stefb" B. wrote:
> Was machst du wirklich?
...Denn sie wissen nicht, was sie tun...
@ Martin Wührer (Firma HTL-Braunau) (erdbeergulasch) >Programm sehe ich nur sowas: "eeueeuueeuueeuueeuueeueeuueeuu" usw.usw. >wenn ich eigentlich lauter "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" übertragen >will. Wisst ihr, was das Problem dabei sein kann? http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART MfG Falk
Es trägt zwar nicht zur Lösung bei, interessiert mich aber einfach. >Du kannst keine "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" sehen, höchstens >"zzzzzzzzzzzzzzzz". Ist das wirklich so? Ich hab bis jetzt bei falscher Baudrate immer was absolut(zumindest für mich nicht) Nachvollziehbares heraus bekommen.
Icke Muster wrote: > Es trägt zwar nicht zur Lösung bei, interessiert mich aber einfach. >>Du kannst keine "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" sehen, höchstens >>"zzzzzzzzzzzzzzzz". > Ist das wirklich so? Er sagte ja: 'höchstens' Damit war gemeint: Selbst wenn alles so funktioniert wie es soll und die Übertragung absolut fehlerfrei funktioniert, so wird am anderen Ende niemals nicht "aaaaaaaaaaaaaaa" herauskommen, sondern da steht dann "zzzzzzzzzzzzzzzzz". Warum? Ganz einfach: Weil das Programm so programmiert ist, dass es lauter 'z' wegschickt und nicht lauter 'a'. > Ich hab bis jetzt bei falscher Baudrate immer was > absolut(zumindest für mich nicht) Nachvollziehbares heraus bekommen. Das ist schon richtig. Ist bei mir ganz genauso. Wenn die Baudrate nicht stimmt, dann kommt auf der Gegenseite Merkwürdiges raus. Allerdings: meistens kommt da ein wirrer Zeichensalat aus den merkwürdigsten Buchstaben. Eine Folge von immer dem gleichen Zeichen ist mir noch nie untergekommen (zumindest erinnere ich mich nicht daran).
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.