Wie auf Mega88 16Bit SPI daten einlesen

Gast #2802447
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
@  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
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
@  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
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
@  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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.