Hi, ich habe ein sehr seltsames Problem mit einem ATMEGA8515. Ich habe folgenden Sourcecode: .include "C:\m8515def.inc" .def temp = r16 .equ CLOCK = 7372800 .equ BAUD = 115200 .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, 1 rcall serout ; Unterprogramm aufrufen 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 Der größte Teil kommt von dieser Seite. Wenn ich in diese Zeile: loop: ldi temp, 1 durch diese: loop: ldi temp, 0 ersetze, dann kommt in meinem Windows Prog. auch 0 als Zahlenwert an. Wenn ich jetzt aber 1 oder eine belibige andere Zahl bis 255 einsetzte, dann kommt immer nur ein Muster aus den Werten 192, 128, 63 und 0. Ich bekomme keine vernünftige Ausgabe. Worann kann das liegen? Ich habe sogar schon den IC gewechselt, aber das ändert nichts. Danke für eure Hilfe!
Schau mal in eine ASCII Tabelle, dann weisst du, was in temp geladen werden muss um ein gewünschtes Zeichen zu senden
Hi, das bringt aber nichts. Wenn ich 0 hinschreibe, dann bekomme ich auch 0 als Zahl ausgegeben. Wenn ich 1 hinschreibe, dann bekomme ich nur noch misst, der sich aus abwechselt 192,128,63,0 zusammensetzt. Das ist total komisch.
Hallo Dann setze doch erstmal die BAUDRATE runter auf 9600 und gebe nur ldi temp, 65 aus. Welches Programm läuft denn auf dem PC ? Ich nehme immer 'Terminal' MFG Dieter
Wenn ich die Bautrate runtersetze, dann ändert sich rein garnichts. Nur das die seltsamen Zahlen halt langsamer kommen. ICh bin total verzweifelt
Hallo Arbeitest du mit Hyperterminal ?? Probier mal das Terminal aus. Ist echt Klasse http://bray.velenje.cx/avr/terminal/ MFG Dieter
Kann es sein, dass die Polarität deines Signals falschrum ist ? Wie hast Du den Atmel mit dem PC verbunden ? Direkt oder über den üblichen Pegelwandler, der das Signal invertiert ? Hyperterminal wird's wohl nicht sein, das zeigt keine Zahlen an...
Ich hab einen MAX232 als Pegelwandler dran. Ich hab einmal das Prgramm Terminal benutzt und einmal ein selber geschriebenes.
Ok, jetzt würde ich zum Oszilloskop greifen und mir mal anschauen, was aus dem Controller wirklich rauskommt. Am Programm fällt mir nichts auf und die Schaltung ist wohl auch OK. Nochwas: läuft der Prozessor wirklich mit dem Quarztakt oder arbeitet der eventuell mit dem internen RC-Oszillator ? Das wäre beim neuen Bauteil so eingestellt und muss im LFUSE-Register geändert werden.
Ich bin auch schon mit dem Oszi ran. Es kommt(egal was ich sende, bis auf 0 eben) ein Art Rechteck wobei "oben" und "unten" je etwa gleich lang sind.
Hallo Mit dem Takt das hast du aber schon geprüft. Ansonsten teste den Takt doch mal mit deinem Oszi. Kleine Schleife mit PORT auf Ausgang und dann am Ozsi mal messen. do PORT HIGH PORT LOW loop Was hast du denn jetzt für High/ LOW Zeiten jetzt an dem TX Pin ?? Hier mal ein Testprogramm von einem MEGA16. Sollte aber auch laufen. 9600 BAUD. MFG Dieter
Hi, hatte in den letzten Tagen keine Zeit mich um das Problem zu kümmern. Jetzt habe ich mal ein Bild von meinem Problem gemacht, vielleicht könnt ihr mir dann helfen. Auf dem Bild ist oben das Signal zu sehen, was hinter dem MAX232 heraus kommt. Das Signal unten ist einefach um zu sehen wann etwas gesendet wird. Wenn das einmal kurz high und dann wieder low ist, dann wird 0 gesendet (als Zahl, nicht als Buchstabe). Und dann wieder von vorne. Ich habe keine Ahnung wie dieses Signal zu stande kommt, aber das Programm im uC sollte richtig sein. Danke für eure Hilfe.
Danke für den Tipp mit dem internen RC-Oszillator. Der war nämlich der Grund für die Fehlfunktionen meines ATMEGA 16. Ich bin vom 2313 umgestiegen und hatte natürlich diese wichtige Stelle im Datenblatt überlesen. Ist es nun besser den internen Oszi zu benutzen oder ist ein Quarz die bessere Alternative? mfg Rob
Hallo, ich arbeite zwar nicht mit dem 8515, hätte aber folgende Tips: 1. Stellt Dein Befehl für das Frame-Format auch Parität und Anzahl der Stoppbits ein? Versuch mal 9600 Baud, 8bit, keine Parität und 1 Stopbit. Schreibt man in Kurzform meist 9600,8,n,1 2. Stelle Hyperterminal ebenfalls auf dieses Frame- Format ein! 3. Sende keine niedrigen Zahlen, da diese eher zu Steuerzwecken gedacht sind. Schau Dir dazu mal eine ASCII-Tabelle an, darstellbare Zeichen fangen erst bei größeren Zahlen an. 4. Versuch mal eine kurze Pause nach jedem Zeichen, z.B. 1ms. 5. Für das Wort "HELLO" müsstest Du also 72,69,76, 76,79 senden. 6. Hast Du tatsächlich einen Quarz mit 7,372800 MHz? Viel Erfolg Thomas
danke für die Hilfe das problem hat sich bereits gelöst. ich hatte übersehen, dass beim ATMEGA16 der interne rc-oszillator voreingestellt ist (mit 1 MHz). das war ich vom 2313 nicht gewöhnt und hatte die zeile im datasheet einfach überlesen. habe jetzt intern 8 MHz eingestellt und alles funktioniert bestens. jetzt werde ich mal den adc ausprobieren, um sensormesswerte seriell an mein visuall c++ programm zu übertragen. mfg Rob
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.