mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Logicanalyser


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Vielleicht werden sich noch ein paar von hier daran erinnern. Ich wollte 
vor kurzem Mal einen einfachen Logicanalyser basteln, der alle paar us 
die Eingänge an einem Port einliest und in einen SRAM schreibt. 
Anschließend können die Daten über den UART an den PC geschickt werden.

Im Anhang ist das von mir geschriebene dazugehörige Assemblerprogramm. 
Als uC habe ich einen 8515 eingesetzt. Ich hab mir das foldendermaßen 
gedacht: vom PC an uC: 'D' (DATA) Daten einlesen. Dann vom PC ein 'R' 
(READ) startet er den Auslesemodus. Jetzt kann per 'N' immer ein Byte 
ausgelesen werden.

Jetzt zu meinem Problem: Eigentlich funktioniert das alles sehr gut. Das 
einlesen geht perfekt - nur beim Auslesen kommt es ab und zu vor, dass 
ein Byte falsch rüber kommt, oder dass es nur ca. 40 statt der 255 Daten 
ausgibt.

Vielleicht kann sich mal jemand mein asm file anschauen. Warum verlässt 
der uC manchmal die Ausleseroutine sram_loop?
Und das bevor counter 255 ist ...

DANKE! andy

Autor: Daniel Aue (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs nur überflogen, aber du musst in der interrupt routine auch das 
statusregister retten (ausser der 8515'er macht das automatisch ?). mit 
temp machst du's ja.

lg

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Daniel,

danke für deine Antwort!
Sorry, bin noch Anfänger. Was meinst du mit Statusregister ?? Welches 
ist das!

THX andy

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, ich hab jetzt das Register USR folgendermaßen gesichert:

push temp      ; Temp sichern
in temp, USR   ; USR sichern
push temp      ;    -"-

; TIMER TEIL

pop temp       ; USR auslesen
out USR, temp  ; USR wieder einstellen
pop temp       ; Temp auslesen
reti         ; return from Interrupt Routine

Kann man das USR einfach schreiben ??

Funktionieren tuts leider immer noch nicht!

andy

Autor: Daniel Aue (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm also beim 4433'er heisst das Statusregister SREG
versuchs mal damit. (müsstest eh im Datenblatt finden)
Der Vorgang so wie du's machst ist aber richtig.

Das Statusregister ist jenes wo alle Flags (Zero, Carry etc.) drinsind, 
deshalb ist es auch so wichtig es zu retten: stell dir mal folgendes 
vor:

tst r15
breq xyz

tst wird ausgeführt und das Z Flag entsprechend beeinflusst, bevor 
jedoch der breq ausgeführt wird kommt der interrupt, der verändert das Z 
Flag, nach dem interrupt wird beim breq fortgesetzt und ganz anders 
verzweigt als vorgesehen, weil ja das Z Flag nicht mehr das ergebnis des 
tst darstellt....
LG

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also dass hat das ganze Problem behoben!
Vielen Dank, daran hab ich nicht gedacht ...

Allerdings kommen manchmal immer noch Bytes falsch rüber (0x00). Das 
kann vielleicht auch an meiner Computer software liegen - ich muss das 
mal noch überprüfen.
Falls es dann immernoch nicht geht, werd ich mich melden.

Danke nochmals! Andy

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.