Hallo
Ein alt bekanntes Problem und ich hab viel nachgeschaut und ich krieg
das einfach nicht hin.
Ich möchte ein Zeichen über USART senden aber hyperterminal zeigt mir
nur wirre Zeichen.
->Board: STK500
->Compiler: avr-gcc
->device: atmega8
->Die Fuses sind wie folgt gesetzt: CKSEL=1111 SUT=01
Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 0ms
und Ext. an XTAL1 (PB6) 4MhZ (quarz)
-> Beim compilieren: Build succeeded with 0 Warnings...
Ich habe 1 zu 1 Beispiele im Internet kopiert, Die Fuses beim SUT_CKSEL
externen XTAL 4.0 MHz auch alles probiert und passiert immer das
gleiche. Kabel habe ich auch schon gewechselt. ICh behaupte, dass es
doch etwas mit der Baud zu tun hat. Ich weis einfach nicht was ich
falsch mache. Habt Ihr noch eine Idee?
Hier ist mein c-code und als Anhang die Fussesbild
Ich danke euch für eure Hilfe!
Grüsse
Hallo,
Penie Lydos schrieb:
> ->Board: STK500> ->Compiler: avr-gcc> ->device: atmega8> ->Die Fuses sind wie folgt gesetzt: CKSEL=1111 SUT=01> Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 0ms> und Ext. an XTAL1 (PB6) 4MhZ (quarz)
Wie ist das zu verstehen? Auf dem STK500 ist eine Fassung für einen
Quarz.
Da steckt Dein Quarz drin?
Jumper dafür ist auch richtig gesetzt?
Das STK500 erzeugt selbst einen Takt, der im Programmer-Menü einstellbar
ist und normalerweise vom Board an XTAL1 gelegt wird.
Gruß aus Berlin
Michael
Hallo,
>UCSRB = (1 << RXEN) | (1<<TXEN);>UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
Wie sind >URSEL, UCSZ1, UCSZ0, RXEN und TXEN<
genau definiert bzw. welchen Wert haben sie ?
Hallo,
@ bko (Gast): ich verstehe den Sinn dieser Frage nicht?
Die Bitwerte der Register hat Atmel in den Includes seiner AVR schon
passend definiert.
Gruß aus Berlin
Michael
@Michael,
sorry für die Verwirrung, meine C-Kenntnisse sind nicht so 100%,
ich wollte eigentlich wissen was für ein Wert denn
genau im dem AVR-UART Register "UCSRC"-Bit7 landet;
denn ich
dachte hier könnte der Fehler liegen, wenn aber
Bit >URSEL< 1 ist, sollte der Code so gehen und
die Baudrate bei einem 4 Mhz Quarz auch genau genug sein
Hallo,
@Michael
Ich tendiere auch dass meiner Fehler mit dem Einsteckens vom Quarz.
ich habe einfach wie unten verbindet und im Programm der PortB6 als
Eingang definiert
PB6------------Quarz (4 Mhz)---------Masse
DDRC = 0x00; // als Eingagang festslegen
PORTC = 0x40; //den Eingangs-Pull-Up aktiviert
leider funktioniert immer nicht
Hallo,
@Michael
Ich tendiere auch dass meiner Fehler mit dem Einsteckens vom Quarz.
ich habe einfach wie unten verbindet und im Programm der PortB6 als
Eingang definiert
PB6------------Quarz (4 Mhz)---------Masse
DDRC = 0x00; // als Eingagang festslegen
PORTC = 0x40; //den Eingangs-Pull-Up aktiviert
leider funktioniert immer nicht
gruß
Hallo,
@ Gast (Gast): vermutlich, weil man weder ind das Datenblatt des AVR
noch in die Beschreibung des STK500 allzu viele Blicke geworfen hat...
Das Datenblatt des AVR hilft ohne die STK-Beschreibung allerdings auch
nicht viel, ein Blick in den Schaltplan des STK500 könnte noch Klarheit
bringen.
Durch die internen Verbindungen auf dem STK500 kann man keinen eigenen
Quarzoszillator beschalten. Die internen Leitungen wären einfach zu
lang.
Atmel hat deshalb eine eigenen Quarz-Oszillator auf das STK500 gebaut.
Quarz also in diese Fassung, Jumper CKSEL passend setzen (der
entscheidet, ob der Programmierbare Oszillator oder der Quarz oder
garnichts benutzt wird) und ok.
PS: sowas ist einer der Gründe, weshalb ich das STK500 nicht so
uneingeschränkt einen Neueinsteiger empfehlen würde. Ein Steckbrett mit
dem AVR, Quarz und Kondensatoren, 5V wäre einfach eindeutig.
Selbst wenn man ein STK500 hat und es dann nur als ISP-Programmer für
das Steckbrett benutzt.
Man sieht aber dann eindeutig, was man wo angeschlossen hat.
Gruß aus Berlin
Michael
@ Gast
ich habe es jetzt wie im Datenblatt atmega8 Seite 27 Figure 11, leider
keiner Änderung, ich habe den Gefühlt dass mein externe Quarz gar keinen
Einfluss hat.
Das prüfen ob der Quarz keinen Einfluss hat geht einfach, steck ihn aus
und lass auch sonst keinen Takt auf die Xtal Pins kommen. Wenn der
Controller danach weiter auf der seriellen Schnittstelle ausgibt, dann
liegt es nicht am Quarz.
Hallo,
der Reihe nach: Programmierung STK500 öffnen.
DeviceID des AVR lesen. Sollte ja als ok gemeldet werden, wenn Du dort
den Mega8 eingetragen hast.
Jetzt den CKSEL jumper vom STK500 abziehen ist irgendwo neben der
Quarzfassung, merken, wie er steckte).
DeviceID des AVR lesen. Sollte die beliebte Fehlermeldung kommen, daß
wohl was nicht stimmt.
Wenn Fehler, sind die Fuses erstmal richtig.
Wenn er sich ohne Jumper lesen läßt, läuft er noch mit internem Takt...
Deinen Quarz in die besagte Fassung stecken.
CKSEL-Jumper in der anderen Stellung aufstecken.
DeviceID des AVR lesen. Klappt das, läuft er mit Deinem Quarz.
Zum Test nur Quarz rausziehen, Device-ID lesen muß Fehler erzeugen.
Gruß aus Berlin
Michael
@michael
>Wenn Fehler, sind die Fuses erstmal richtig.>Wenn er sich ohne Jumper lesen läßt, läuft er noch mit internem Takt...
ja er läßt sich ohne Jumper lesen
>Deinen Quarz in die besagte Fassung stecken.>CKSEL-Jumper in der anderen Stellung aufstecken.
Auf meinem Avr ist OSCSEL, entpricht das CKSEL
>DeviceID des AVR lesen. Klappt das, läuft er mit Deinem Quarz.>Zum Test nur Quarz rausziehen, Device-ID lesen muß Fehler erzeugen.
Quarz rausziehen oder nicht gibt gleichen falsche Zeichen aus.
Penie Lydos schrieb:
> @michael>>Wenn Fehler, sind die Fuses erstmal richtig.>>Wenn er sich ohne Jumper lesen läßt, läuft er noch mit internem Takt...>> ja er läßt sich ohne Jumper lesen>>>Deinen Quarz in die besagte Fassung stecken.>>CKSEL-Jumper in der anderen Stellung aufstecken.>> Auf meinem Avr ist OSCSEL, entpricht das CKSEL>>>DeviceID des AVR lesen. Klappt das, läuft er mit Deinem Quarz.>>Zum Test nur Quarz rausziehen, Device-ID lesen muß Fehler erzeugen.>> Quarz rausziehen oder nicht gibt gleichen falsche Zeichen aus.
logischer Schluss.
Dein Quarz ist zur Zeit reine Zierde. Der µC benutzt ihn nicht.
@Gast
Der Quarz ist ausgesteckt und auch keinen Takt auf die Xtal Pins.
trotzdem gibt Controller weiter auf der seriellen Schnittstelle aus.
Und wenn es nicht an Quarz liegt, woran dann!?!
Penie Lydos schrieb:
> @Gast>> Der Quarz ist ausgesteckt und auch keinen Takt auf die Xtal Pins.> trotzdem gibt Controller weiter auf der seriellen Schnittstelle aus.>> Und wenn es nicht an Quarz liegt, woran dann!?!
Dass deine Fuses nicht stimmen und der Quarz keinen Einfluss auf die
Taktfrequenz des µC hat.
Hallo,
1.
Schreib die Baudrate doch mal Vollständig in das UBRR - Register!!!!
Du schreibst nur die unteren 8 bit in UBRRL. Das Register ist 16 Bit
breit und bei 4Mhz => 9600 Baud ist dein Teilerverhältnis 26.
Das obere Register ist nicht initialisiert.
Deine Version:
UBRRL = (unsigned char) USART_BAUD_SELECT;
Richtig:
UBRR = USART_BAUD_SELECT;
2. Du hast das Register ACSRA nicht initialisiert. Hier kannst Du die
UART im 2X mode laufen lasen.
3. Drehe die Reihenfolge um. Erst alles initialisieren und dann die UART
aktivieren.
UCSRA = 0;
UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
UBRR = USART_BAUD_SELECT;
UCSRB = (1 << RXEN) | (1<<TXEN);
4. Wenn du die Lib WINAVR benutzt, warum dann nicht auch die Makros in
"util/setbaud.h" dazu?
5. Gibt es nicht ein Example für dein Problem? Du bist bestimmt nicht
der erste der mit dem STK500, dem gcc und ATMEGA8 versucht die UART zu
bedienen!
Gruß,
Michael
Hallo,
Penie Lydos schrieb:
> @michael>>Wenn Fehler, sind die Fuses erstmal richtig.>>Wenn er sich ohne Jumper lesen läßt, läuft er noch mit internem Takt...>> ja er läßt sich ohne Jumper lesen
Dann kann das Bild aus dem ersten Posting mit den Fuseeinstellungen
nicht stimmen...
>>>Deinen Quarz in die besagte Fassung stecken.>>CKSEL-Jumper in der anderen Stellung aufstecken.>> Auf meinem Avr ist OSCSEL, entpricht das CKSEL
Ja, hatte vorhin keine STK500 Beschreibung zur Hand.
Gruß aus Berlin
Michael
Wenn ich die Augen geeignet zusammenkneife, meine ich zu erkennen, dass
da ein Kabel zu einem Steckbrett führt, auf dem ein Quarz samt
zugehörigen Kondensatoren sitzt.
Jemand der das STK kennt, möge mein Vertrauen in Atmel wiederherstellen,
indem er mir sagt, dass sich Atmel den Anschluss eines Quarzes in einem
Entwicklungsboard ganz und gar nicht so vorgestellt hat.
Auf dem STK ist doch ein Sockel für genau diesen Zweck.
Oder aber du machst einfach alles extern auf deinem Steckbrett.
Der Quarz darf nunmal nicht ewig weit weg sein vom AVR.
@ gast
>Oder aber du machst einfach alles extern auf deinem Steckbrett.
ja
mit SUT_CKSEL : Ext. Crystal/Resonator High Freq.; Start-up time: 16K
CK + 0 ms
Ja, das ist die Standardbeschaltung eines Quarzes.
Aber: Diese Anordnung darf höchstens ein paar Zentimeter vom µC entfernt
sein.
Und damit du diese Forderung erfüllen kannst, hat ATMEL dem STK500 einen
Sockel für einen Quarz spendiert (und bereitet anscheinend das
Quarzsignal etwas auf, wenn ich eine Aussage von weiter oben richtig
interpretiere). Dort sollst du deinen Quarz reinstecken!
Liest den heutzutage keiner mehr Handbücher? Oder hast du keine
Unterlagen zum STK500?
Also dein AVR ist auf Quarz gestellt und er gibt jetzt ohne Quarz
Zeichen aus. Das bezweifel ich.
Aber wie schon geschrieben -> Lies mal die Anleitung zu deinem STK500.
Und dann solltest du falls du etwas umbaust nicht einfach "leider geht
immer nicht" schreiben. Was geht nicht? Bei welcher Konfiguration geht
es nicht? Was hast du versucht um es zu beheben? ...
Falls das bisher untergegangen ist:
Solange dein Mega8 Zeichen ausgibt, wenn die Verbdinung zum Quarz
unterbrochen ist, wird logischerweise der Quarz nicht benutzt (auch wenn
da ein Kabel zum µC führt).
Solange du das nicht behebst, ist alles andere sinnlos.
Es muss so sein:
Quarz dran: -> µC läuft und gibt was aus.
Quarz nicht dran: -> µC läuft nicht und gibt daher auch nichts aus.
Hallo,
Wouf!!!!!!!
endlich weiss ich wo mein Problem liegt:
Ich arbeite mit einem ext. Quarz,
schaltung siehe oben: Datum: 06.05.2009 16:08
Es komm immer wirre Zeichen raus. weil das den PC aus dem Tackt kommt!
Jetzt habe ich einfach UBRR den wert 25 gegeben und bekomme ich endlich
was ich wollte.
Troztdem danke an alle die mir geantwortet haben.
gruß