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
@ 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 ;-)
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).
@ 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.
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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.