Hallo, ich versuche nun seit Tagen über die RS232 Schnittstelle mit dem Atmega8 was zum Computer zu schicken, aber es gelingt mir einfach nicht. Es kommt einfach gar nix an. Ich verwende HTerm als TerminalProgramm, aber es ist das erste mal das ich mit Terminalprogrammen arbeite. Die Leuchte "CTS" in Hterm blinkt dabei dauernd, aber ich empfange einfach nix. Ich verwende das StarterBoard aus dem Shop, und ein stinknormales Kabel, also KEIN Nullmodemkabel. Der ATMega8 läuft mit 8MHz externer Quarz. Bitte helft mir weiter Das ist mein Programm, es sollte dem aus dem Tutorial entsprechen: .include "m8def.inc" ; Definitionsdatei für den Prozessortyp einbinden .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 .def zeichen = r19 .equ RxD = 0 ;UART Reveive .equ TxD = 1 ;UART Transmit ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .equ F_CPU = 8000000 ; Systemtakt in Hz .equ BAUD = 9600 ; Baudrate .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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .org 0x0000 rjmp main main: ldi temp1, LOW(RAMEND) out SPL, temp1 ldi temp1, HIGH(RAMEND) out SPH, temp1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ldi temp1, HIGH(UBRR_VAL) out UBRRH, temp1 ldi temp1, LOW(UBRR_VAL) out UBRRL, temp1 ldi temp1, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0) out UCSRC, temp1 sbi UCSRB,TXEN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ldi temp1,0 ldi temp2,0 ldi temp3,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 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 rjmp serout out UDR, zeichen ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; sync: push temp1 push temp2 ldi temp1,0 sync_1: ldi temp2,0 sync_loop: dec temp2 brne sync_loop dec temp1 brne sync_1 pop temp2 pop temp1 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:-) Ich hab das Tutorial nun schon mehrmal durchgelesen und es ist mir nichts aufgefallen, was falsch sein könnte
Hi Ich hab das Tutorial nun schon mehrmal durchgelesen und es ist mir >nichts aufgefallen, was falsch sein könnte Mir auch nicht. >Der ATMega8 läuft mit 8MHz externer Quarz. Wirklich? Also Fuses-Bits richtig gesetzt? MfG Spess
Hi
>Stichwort: Interrupt-Tabelle
Er benutzt aber keine Interrupts!
MfG Spess
Was befindet sich denn Hardwaremäßig zwischen den RXD/TXD Pins und dem RS232 Kabel? Hast du die Masse auch mit der Strippe verbunden? Gruß, Magnetus
Ich hab zB ein Programm wo ne Uhr läuft getestet und das funktioniert einwandfrei. Ne Langzeitmessung, ob es sich um 8.00000..usw. Mhz handelt hab ich allerdings nocht nicht gemacht, aber es steht im Handbuch das es genau 8MHz sein sollen. Im Anhang sieht man wie ich es im AVRStudio eingestellt hab
Stell mal das UBRR Register händisch mit dem Wert aus dem Datenblatt ein. Die Tabellen fangen bei mir auf Seite 159 an.
Hallo,
Michael schrieb:
> Stichwort: Interrupt-Tabelle
er benutzt keine Interrupts, er gibt auch keine frei.
Wie soll ihm Dein Hinweis also helfen?
Grrr, spess53 war schneller...
Sieht sonst erstmal glaubwürdig aus.
Das Board kenne ich nicht weiter, ob die Belegung mit Deinem Kabel
stimmt, solltest also eher Du anhand der Schaltung kontrollieren können.
HTerm ist ein nettes Analyseprogramm, für solche Sachen ist mir aber ein
übliches Terminalprogramm trotzdem lieber.
Ich benutze meist das alte TeraTerm V2.3
9600Baud, kein Hardware-Handshake sollte ja zu Deinem Source passen.
Gruß aus Berlin
Michael
Alte Vorgehensweise: -Baudrate am Sender und Empfänger identisch? -Kabel vom Atmega trennen, Pin 2 und Pin 3 brücken, kommt das gesendete Zeichen zurück? JA: PC-Seitig OK -Kommt am ATMEGA8-TxD-Pin ein Signal raus? JA: Atmega sendet wahrschinlich -Auf der "anderen Seite" des RS-Bausteins? Pegel OK JA: Pegelwandler sollte OK sein Schöne Ostern
Das ist der Schaltplan aus dem Handbuch. Allerdings steht auf dem Pegelwandler nicht MAX232 sonder ST232 drauf, aber laut dessen Datenblatt sind die beiden identisch...hoff ich... Ich hab einfach mit einem kurzen Draht ne Verbindung zwischen dem TXD Pin am ATmega8 und dem Pin11 (T1In) hergestellt. Der Rest ist schon verbunden
Hi Ich gehe mal davon aus, das du das Olimex-Board hast. Hast du die richtigen Controller-Pins mit TX und RX vom Treiber verbunden, oder überhaupt verbunden. Wenn ja, dann entferne mal den Controller und verbinde in der Fassung Pin 2 und 3. Wenn du jetzt mit HTerm etwas sendest, sollte das als Echo zurückkommen. Wenn du das gemacht hast, meldest du dich wieder. MfG Spess
Stefan A. schrieb: > Ich hab einfach mit einem kurzen Draht ne Verbindung zwischen dem TXD > Pin am ATmega8 und dem Pin11 (T1In) hergestellt. Das ist Quatsch...
Hi
>Pin am ATmega8 und dem Pin11 (T1In) hergestellt
Das ist CTS. Das muss nach RX. Deshalb blinkt auch die CTS-Led.
MfG Spess
Wow das wars. Ich werd verrückt Ich hab einfach nicht verstanden warum die Pins am ST232 der T1In mit CTS, der T2In mit Rx, der R1out mit Tx usw beschriftet sind. Ich dachte mir das passt doch überhaupt nicht zusammen weil ich fest davon ausging der TDX vom Kontroller muss zum T1IN am ST232 Hab ich da was flasch verstanden? Aber DANKE, DANKE für die Hilfe!
TxD und RxD auf der "5V-Seite" des RS-Bausteins sind ebenfalls falsch. Das Ganze ist aber einfach zu merken: TxD vom Atmega (da kommt das Serielle Signal raus, Transmit) geht über den Pegelwandler TxD-In->TxD-Out an den RxD-In des PC. (Receive, der PC empfängt) Umgekehrt geht das Transmit-Signal des PC über den Receive-Pegelwandler an den RxD-Pin des Atmega.
Hi
>Wow das wars.
Mit den richtigen Informationen von dir wärst du schon vor fast einer
Stunde so weit.
MfG Spess
>Mit den richtigen Informationen von dir wärst du schon vor fast einer >Stunde so weit Ich hab versucht so viel Infos zu geben wie möglich, aber dass es an der Verkabelung liegt.... Wenn ich was vom PC empfangen möchte, muss ich demnach den RxD vom ATmega mit dem R1Out vom ST232 verbinden nehm ich mal an, oder?
Hi >Ich hab versucht so viel Infos zu geben wie möglich, aber dass es an der >Verkabelung liegt.... Der Fehler liegt erfahrungsgemäss in dem Teil, der nicht gezeigt wird. Murphy lässt grüssen. >Wenn ich was vom PC empfangen möchte, muss ich demnach den RxD vom >ATmega mit dem R1Out vom ST232 verbinden nehm ich mal an, oder? Ja. MfG Spess
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.