Wie auf Mega88 16Bit SPI daten einlesen

Gast #2802447
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
#2802453
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 ;-)
Gast #2802458
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).
#2802468
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.
Gast #2802513
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.
#2802622
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren