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.