mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software URAT geht nicht


Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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/...

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

Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
... das Hauptprogramm hab ich hier ...

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.