Forum: Mikrocontroller und Digitale Elektronik Logicanalyser


von Andy (Gast)


Angehängte Dateien:

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

von Daniel Aue (Gast)


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

von Andy (Gast)


Lesenswert?

Hi Daniel,

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

THX andy

von Andy (Gast)


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

von Daniel Aue (Gast)


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

von Andy (Gast)


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

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.