Also irgendwie bekomme ich meine serielle Verbindung über UART nicht am Laufen. Ich benutze hier einen ATmega8, der extern von einem Oszillator auf 4 MHz gebracht wird (werden soll). Ich bin mir zunächst nicht sicher, ob die Fuses dafür richtig gesetzt sind, deshalb der Dateianhang... Stimmt das so? Der Oszillator ist über XTAL1 mit dem Mikrocontroller verbunden. Funktioniert UART eigentlich nur mit externer Taktung oder geht das auch über die Internal Clock? Zum Test der UART-Funktion habe ich folgendes Programm kompiliert und hochgeladen: .include "m8def.inc" .def temp = r16 .equ CLOCK = 4000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 ; Stackpointer initialisieren ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ; Baudrate einstellen ldi temp, LOW(UBRRVAL) out UBRRL, temp ldi temp, HIGH(UBRRVAL) out UBRRH, temp ; Frame-Format: 8 Bit ldi temp, (1<<URSEL)|(3<<UCSZ0) out UCSRC, temp sbi UCSRB,TXEN ; TX aktivieren loop: ldi temp, 'T' rcall serout ; Unterprogramm aufrufen ldi temp, 'e' rcall serout ; Unterprogramm aufrufen ldi temp, 's' rcall serout ; ... ldi temp, 't' rcall serout ldi temp, '!' rcall serout ldi temp, 10 rcall serout ldi temp, 13 rcall serout rjmp loop serout: sbis UCSRA,UDRE ; Warten bis UDR für das nächste ; Byte bereit ist rjmp serout out UDR, temp ret ; zurück zum Hauptprogramm Da ist hoffentlich kein Fehler enthalten??? Danke schon mal für die Beantwortung meiner Fragen. Um die Funktion zu testen arbeite ich übrigens mit HyperTerminal, was problemlos klappen sollte oder?
Dein Bild zeigt Clockselect auf 0, das heißt, es ist für externen Takt eingestellt. Du musst daher einen externen Taktgeber (z.B. Quarzoszillator, der "Blechsarg" mit den 4 Beinen) anschließen. Die Frequenz von 4MHz ist für UART nicht gut geeignet. Mit einem "Baudratenquarz" von z.B. 3,6864MHz geht das bedeutend besser. Solltest du keinen ISP-Zugriff mehr haben, dann solltest du einen externen Takt anschließen und die Fuses wieder richtig setzen. Wie das geht, findest du im Datenblatt unter Clock sources und fuses. ...
Ja, diesen Blechsarg mit 4 Beinen habe ich dran. Zur Datenübertragung benutze ich die Pins PD.0 und PD.1. Das stimmt doch oder? Auch wenn die Frequenz vielleicht nicht haargenau passt, müsste ich doch irgendetwas empfangen oder?
Hallo! Ja, PD0 (RXD) und PD1 (TXD) stimmt. Mit 4MHz geht's auch, nehm ich auch her. Viel Spaß noch Pete
Also ich habe den MAX232N folgendermaßen beschaltet. PD.0 --> R1IN PD.1 --> T1IN T1OUT --> 3. Pin der D-Sub Buchse R1OUT --> 2. Pin der D-Sub Buchse Stimmt das denn so? Habe die Schaltung auf irgendeiner Internetseite gefunden. Sie weicht von der hier im Tutorial vorgestellten Schaltung ab, habe ich gerade festgestellt. Welche ist denn jetzt richtig??? Bevor ich die Sache jetzt umlöte, brauche ich eine Bestätigung für meine Annahme. DANKE!
RX ist falsch herum. TX ist senden, also IN an AVR, OUT an Leitung RX ist empfangen, also IN an Leitung, OUT an AVR Oder? ...
Also ich werde mich jetzt mal ans umlöten machen... Ein gutes Beispiel dafür, dass man nicht jeder Internetseite Glauben schenken sollte. Naja, vielleicht ist das auch eine Version die ein Nullmodemkabel verwendet. Keine Ahnung. Bis gleich...
So, bin jetzt fertig und ihr werdet es nicht glauben, es funktioniert... Echt bescheuert.
ich würde das progie vom grundaufbau her auch nuzen wollen. aber wenn ich es in avr studio simuliere bleibt er mir bei der übertragung des drtitten buchstabens in der schleife in serout hängen. ..denn nachdem der 2. buchstabe gesendet wurde wird UDRE nicht wieder auf high gesetzt. warum auch immer? ich hätte es ja schon praktisch probiert, aber ich habe momentan keinen atmega8 da. mfg robert
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.