Forum: Mikrocontroller und Digitale Elektronik serielle Daten einlesen AT90S8535


von chris (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich hab eine frage zum Datenblatt als Anhang,(Seite 3)
unswar will ich die seriellen Daten in ein 8535 einlesen und komme
nicht mehr weiter
ich hab die clock auf int0 und die daten leitung auf D0
wenn jetzt der interupt anfängt liest er mir doch die daten in ein
register  aber wie??

int0_handler:
in temp1,pind


und das als schleife bis der int0 weg is?

oder bin ich total auf dem Holzweg ?
für Unterstützung bin ich dankbar!

von stromi (Gast)


Lesenswert?

hab das mal ohne interupt gemacht, allerdings mit dem alten c64 im
maschinensprache......
ich würde beim interupt  ein bit einlesen (in eine
wordvariable)einschreiben nach links schieben, test auf die frage: sind
alle bit's drin, interupt wieder frei geben .
wenn alle bits da sind: ausmaskieren--> vorzeichen und werte, asci
wandel und was sonst noch..
tschaui

von chris (Gast)


Lesenswert?

ja erstmal danke für die tips genau da bin ich in etwa beim probieren
wie geht das ein bit weiter schieben
int0_handler:
rcall lcd_clear
rcall up1
mov temp,r20
rcall lcd_data
reti
up1:
  ldi  r21,8      ;8 Datenbits einlesen
up2:
        in  r23,pind    ;Datenbit einlesen
  ror  r23      ;
  ror  r22      ;
  dec  r21      ;alle Bits eingelesen?
  brne  up2      ;nein -> Schleife
  nop
  nop
  in  r23,pind    ;Datenbit einlesen
  ret

von stromi (Gast)


Lesenswert?

also ich bin schon etwas raus, aber in einem interupt, also das
clocksignal nimmt statt low  high an, ist auch nur ein mögliches bit am
datenpin zu lesen, es kommen nicht alle daten hinterher und das
clocksignal bleibt solange high.
so wie ich das sehe ist ein bit des datenstromes dann lesbar, wenn
interupt erkannt worden ist. dann sollte das clocksignal wieder low
werden und das nächst high auf dem clockpin löst dann den nächsten
interupt aus, und das nächste bit des datenstromes ist dan am datenpin
lesbar. bis dann alle bits gelesen wurden.
also kurz gesagt jedes clocksignal biete ein bit am datenpin an.


-_-_-_-_-.........  <-----------clock
 0 1 0 1 1 .........  <-----------daten
 ! ! ! ! !
 ! ! ! ! !
da wo ein ausrufezeichen ist, ist auch ein interupt
ist scho spääät
tschaui

von chris (Gast)


Lesenswert?

Hi,
ja war gestern spät :-)
im datenblatt ist ja die Beschreibung und das steht (so hab ichs
verstanden wenn clock high dann 16 bit)
oder nicht?
aber wie weis ich wo welches bit ist ?

von Peter D. (peda)


Lesenswert?

Also Datenblatt kann man das nicht nennen, dazu ist es zu dürftig.

Nirgends steht, mit welcher Frequenz getaktet wird und wie man auf den
Beginn eines Datensatzes synchronisiert.

Mit viel gutem Willen kann man vermuten, daß nur alle 2s ein Datensatz
gesendet wird. D.h. mit einem Timeout von <1s könnte man auf den Anfang
synchronisieren.

Ansonsten klingt das verdammt nach: Warum benutzt Du nicht einfach das
SPI im Slave-Modus ?

16 Bit sind ja 2 Byte also 2 SPI-Interrupts.


Mit 1s Timeout ist gemeint, daß wenn nicht innerhalb 1s nach dem
1.SPI-Interrupt alle restlichen Datenbytes empfangen wurden, dann wird
das SPI neu initialisiert und wartet auf den Beginn des nächsten
Datensatzes.


Peter

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.