Hallo Leute, also ich hab versucht folgenden Application Note von Atmel zu nutzen und einen URAT aufzubauen. http://www.atmel.com/dyn/resources/prod_documents/DOC0952.PDF Allerdings hat es nicht geklappt, in meinem Hauptporgramm mache ich zu aller erst alle LEDs an, wenn alles funktionieren würde wie gedacht, dann sollte das empfangene Byte im Anschluß an den LEDs zu sehen sein. Praktisch sieht es dagegen so aus, daß alle LEDs entweder ausgehen oder bei jedem Interrupt gaaaaaaaaaaaaanz kurz flackern, mehr geht nicht, aber warum ... könnt ihr mir vielleicht weiterhelfen? Besten Dank. Jens
ich habs nur kurz überflogen, aber folgende Fehler fallen mir auf: ========== .ORG 0x0000 RJMP START .org INT0addr RJMP ISERVE START: damit löst jeder Interrupt größer als INT0addr einen Sprung irgendwo nach start aus, sicherer wäre: (statt den .. die entsprechende Anzahl von Int-Vektoren vom 1200 .org 0x00 rjmp START reti reti .. rjmp ISERVE .. reti START: ========== ISERVE clt sollte vermutlich cli lauten, ist aber unnötig, wird duch den Sprung zum int-Vektor vom uP erledigt, detto ist sei unnötig das mach RETI ========== getchar: 3* bitdelay bedeutet dass du erstmals mittig im 1.Bit abtastest, du kontrollierst nicht ob überhaubt ein ganzes Startbyte empfangen wurde, jede Flanke am int0 löst die komplette Empfangsroutine aus. Kontrolliere nach dem ersten bitDelay ob immer noch der Pegel des Startbits anliegt, ansonsten Abbruch. ========== clc sbic portD, 0 sec ror rx_byte dieses Stück darf nicht vom dec vom Counter unterbrochen werden. sbic testet ob Eingang Null und überspringt gegebenenfalls das Set vom Carry. Dieses wird mit ror nämlich in den Empfangsbuffer geschoben. Details zu den Befehlen findet man übrigends in der Dokumentation von Atmel ;-) ========== ror rx_byte muß durch rol ersetzt werden. Seriell wird das Bit7 zuerst übertragen ========== bitcnt wird nicht initialisiert, die Empfangsroutine wird zufällig oft durchlaufen und die eingelesenen Bits haben nichts mehr mit dem seriellen Signal zu tun ========== putchar das ror muß ebenfalls unmittelbar vor der Carry-Abfrage kommen. ror durch rol ersetzen bitcnt nicht initialisiert Der Rest scheint recht stimmig. Verbessere mal die Tx-Routine und schick ein paar Byte an den PC "Hello world", wenn das klappt verbessere die Rx-Routine und schick jedes empfangene Byte an den PC zurück (Echo) und wenn das alles spielt wird das ansteuern der LEDs auch bald klappen. grüsse leo9
Danke für die Tipps ... ich hab halt mehr oder weniger streng den Applikation Note bzw. darin befindliche Struktogramme umgesetzt. Was mich dann beim ausprobieren besonders gewundert hat, daß der Ausgang kurz flackert und entweder alle Portbin 0 oder 1 sind???
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.