Forum: Mikrocontroller und Digitale Elektronik Software URAT geht nicht


von Jens (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

... das Hauptprogramm hab ich hier ...

von leo9 (Gast)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.