Hallo, habe soeben das Beispielprogramm aus dem Tutorial --> http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART erstes Programm testen wollen, doch ich bring es nicht zum Laufen. Hab im HTerm (Terminal), alles richtig eingestellt --> 8 Data, 1 Stop, none Parity. Es wird nichts an den HTerm übertragen. Worann kann das liegen? Ich bitte um Hilfe, danke. MfG Vali
Mach mal eine Brücke zwischen RXD und TXD und gib im Hterm was ein, es sollte als Echo zurück kommen. Dann weisst du schon mal das die Verbindung zum PC passt. Dann kannst du noch die RX TX Verbindung zum Port verdreht haben. Wenn das auch nicht hilft, dann ist in deinem Programm ein Wurm.
Danke für den Tipp, habe TX und RX miteinander verbunden. Resultat diese Kommunikation funktioniert. Weiteres habe ich das Kabel an RX/TX umgedreht, brachte aber auch kein Resultat. Noch Ideen?
Sepp Horst schrieb: > Danke für den Tipp, habe TX und RX miteinander verbunden. Wo hast du das gemacht? So richtig aussagekräftig ist dieser Test erst dann, wenn du den µC aus dem Sockel nimmst und die beiden Pins im µC-Sockel brückst. Damit hast du dann die komplette Kette getestet. > Kommunikation funktioniert. Weiteres habe ich das Kabel an RX/TX > umgedreht, brachte aber auch kein Resultat. Noch Ideen? In 95% aller Fälle stimmt die Taktrate des µC nicht. Allerdings sieht man dann meistens trotzdem am Terminal was. Sind dann halt die falschen Zeichen. Aber es rührt sich zumindest was.
Habe am SDK500 die beiden Pins RS232 Spare (TX/RX) kurzgeschlossen und dannach konnte Zeichen Zeichen Übertragen, welche anschließend Empfangen wurden. Verwende den internen Oszillator des Boards. Welche Settings muss ich bezüglich der Taktrate machen? Danke für die Antworten =)
Sepp Horst schrieb: > Verwende den internen Oszillator des Boards. Welche Settings muss ich > bezüglich der Taktrate machen? Du musst die richtige Fuse-Kombination wählen: Der S*T*K-Oszillator gilt als externer Oszillator, nicht als RS-Dingsbums.
> Du musst die richtige Fuse-Kombination wählen: Bei Fusesettings extern verwenden, 3-8 MhZ? > Der S*T*K-Oszillator gilt als externer Oszillator, nicht als > RS-Dingsbums. Fusesetting: Ext. RC Clock? Was muss ich bei den beiden anderen Screenshots einstellen?
Sepp Horst schrieb: > Fusesetting: Ext. RC Clock? Eben nicht. Das Ding heisst "ext. Oszillator" oder so. > > > Was muss ich bei den beiden anderen Screenshots einstellen? Nichts weiter. Das STK500 schafft allerdings maximal 3,686MHz...
Habe jetzt Ext. Clock eingestellt, es tut sich noch immer nichts. Im Programm hab ich die 3686400 Hz eingestellt, welche auf Screenshot 3 eingestellt sein müssten.
Für solche Sachen programmiere ich mir dann gerne einen Blinker ins Programm...
Ich wiederhole mich gerne >> Danke für den Tipp, habe TX und RX miteinander verbunden. > > Wo hast du das gemacht? > > So richtig aussagekräftig ist dieser Test erst dann, wenn du den µC aus > dem Sockel nimmst und die beiden Pins im µC-Sockel brückst. Damit hast > du dann die komplette Kette getestet. Das hier > Habe am SDK500 die beiden Pins RS232 Spare (TX/RX) kurzgeschlossen > und dannach konnte Zeichen Zeichen Übertragen, welche anschließend > Empfangen wurden. würde mir nicht reichen. Erst dann wenn ich zweifelsfrei sagen kann, dass die Signale auch wirklich bis zum µC durchkommen bzw umgekehrt vom µC bis zum PC durchkommen, erst dann würde ich diesen Test als erfolgreich werten. RS232 Spare ist nicht der µC. Vom Spare Connector bis zum µC ist es noch ein Stück, auf dem ebenfalls was schiefgehen kann.
Hier das Programm mit den eingestellten 3,6864 MhZ. Habe ich einen Fehler im Programm (ist vom Tutorial)? .include "m8def.inc" .def temp = r16 ; Register für kleinere Arbeiten .def zeichen = r17 ; in diesem Register wird das Zeichen an die ; Ausgabefunktion übergeben .equ F_CPU = 3686400//4000000 ; Systemtakt in Hz .equ BAUD = 9600 ; Baudrate ; Berechnungen .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille .if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ; max. +/-10 Promille Fehler .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!" .endif ; Stackpointer initialisieren ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, LOW(RAMEND) out SPL, temp ; Baudrate einstellen ldi temp, HIGH(UBRR_VAL) out UBRRH, temp ldi temp, LOW(UBRR_VAL) out UBRRL, temp ; Frame-Format: 8 Bit ldi temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0) out UCSRC, temp sbi UCSRB,TXEN ; TX aktivieren loop: ldi zeichen, 'T' rcall serout ; Unterprogramm aufrufen ldi zeichen, 'e' rcall serout ; Unterprogramm aufrufen ldi zeichen, 's' rcall serout ; ... ldi zeichen, 't' rcall serout ldi zeichen, '!' rcall serout ldi zeichen, 10 rcall serout ldi zeichen, 13 rcall serout rcall sync rjmp loop serout: sbis UCSRA,UDRE ; Warten bis UDR für das nächste ; Byte bereit ist rjmp serout out UDR, zeichen ret ; zurück zum Hauptprogramm ; kleine Pause zum Synchronisieren des Empfängers, falls zwischenzeitlich ; das Kabel getrennt wurde sync: ldi r16,0 sync_1: ldi r17,0 sync_loop: dec r17 brne sync_loop dec r16 brne sync_1 ret Es tut sich einfach noch immer nichts :/
Sepp Horst schrieb: > .equ F_CPU = 3686400//4000000 ; Systemtakt in ^^ Das ist kein Kommentar in Assembler.
Mit dem falschen Kommentar bracht der Compiler null Warnings, sowie null Errors. Habe aber nun das Kommentar durch ";" geändert, es hat sich aber nichts darann geändert. Kann noch immer nichts empfangen.
was du da geschrieben hast, ist vermutlich eine division... und nicht nur ein fehlerhafter kommentar.
Ich kann Zeichen empfangen, der Fehler lag daran, dass ich das Programm in den EPROM und nicht in den Flash geladen habe. Es kommt zwar nur wirres Zeugs an, aber das wird warscheinlich an den falschen Einstellungen des Clocks liegen.
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.