Forum: Mikrocontroller und Digitale Elektronik Wie auf Mega88 16Bit SPI daten einlesen


von Peter (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Problem.

Ich will 2 Byte auf einem Mega88 über SPI einlesen (Slave).

Ablauf beim Senden (das was ich bekomme) : CS Lo   Byte1  Byte2 / CS 
Hi
Diese Daten kommen oft direkt hintereinander, manchmal liegen auch 
Sekunden dazwischen.

Aber woher weiß ich sicher welches es das 1. und welches das 2. Byte 
ist?

Peter

von Falk B. (falk)


Lesenswert?

@  Peter (Gast)

>Ich will 2 Byte auf einem Mega88 über SPI einlesen (Slave).

Hmm, da ist der AVR nicht so doll.

>Ablauf beim Senden (das was ich bekomme) : CS Lo   Byte1  Byte2 / CS
>Hi
>Diese Daten kommen oft direkt hintereinander,

Das kann eng werden, ein paar Mikrosekunden Pause braucht der AVR als 
SPI-Slave.

>Aber woher weiß ich sicher welches es das 1. und welches das 2. Byte
>ist?

Aus dem Verhalten von CS. Das erste Byte nachdem CS low gegangen ist, 
ist das erste Byte ;-)

von Peter (Gast)


Lesenswert?

Die paar Mikrosekunden pause hat der, sind eher Millisekunden.

Wie soll ich den SC überwachen.
Der Empfang soll im SPI-Interrupt laufen, da meine Main-Schleife 
gelegentlich länger braucht (wartet auf ein Display).

von Falk B. (falk)


Lesenswert?

@  Peter (Gast)

>Die paar Mikrosekunden pause hat der, sind eher Millisekunden.

Na dann sollte es klappen

>Wie soll ich den SC überwachen.

Kann man z.B. per Pin Change Interrupt, wobei man das auch halb in 
Software per Polling machen kann.

>Der Empfang soll im SPI-Interrupt laufen,

Sicher.

> da meine Main-Schleife
>gelegentlich länger braucht (wartet auf ein Display).

Warten ist allgemein nicht so gut, siehe Multitasking.

von Peter (Gast)


Lesenswert?

Mit dem Pin Change Interrupt hatte ich noch nie gearbeitet, aber das 
solle mir helfen.
Einfach auf PCINT2 abfragen und da den Pegel von der SS Leitung 
einlesen.
Wenn die Lo ist dann wird gestartet.

Habe in der Hauptschleife sogar 100ms warte Schleifen.
Die wichtigen "Echtzeit" Teile sind alle über Interrupts geregelt, nur 
das Hauptprogramm hat Wartezeiten drin. Unter einem RTOS würde ich es 
nicht großartig anders machen, außer das ich den Task schlafen legen 
würde.

von Falk B. (falk)


Lesenswert?

@  Peter (Gast)

>Habe in der Hauptschleife sogar 100ms warte Schleifen.
>Die wichtigen "Echtzeit" Teile sind alle über Interrupts geregelt, nur
>das Hauptprogramm hat Wartezeiten drin. Unter einem RTOS würde ich es
>nicht großartig anders machen, außer das ich den Task schlafen legen
>würde.

Dann solltest du versuchen, noch was zu lernen.

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.