Forum: Mikrocontroller und Digitale Elektronik SPI mit Start- und 2 Stoppbit zur ScreenKey Ansteuerung


von Simon Schmid (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forum

Mit einem AVR moechte ich mein ScreenKey 16.2 ansteuern.
Ein ScreenKey ist eine Taste mit integriertem 32x16Pixel LCD. Zur
Ansteuerung benoetigt es lediglich eine Daten ud Clockleitung. Ich
denke das sollte per SPI moeglich sein.

Nun zu meinen Fragen:
Das Protokoll besteht aus
• Start bit low SA
• Data bit low / high b0 - b7 (LSB first, MSB last)
• Parity bit low / high Pb
• 2 Stop bits high SE
Details im Datasheet im Anhang (167kB)

wie kann ich das realisieren?

Ich hoffe hier Interessenten zu finden, die mir bei den Einstellungen
am SPCR, der Generierung von Start und Stopbit sowie des Berechnens des
Paritybits helfen koennen - vielleicht sogar ein Beispiel ASM
programmieren...

Mir wurde auch geraten, den CLK und DAT selbst ueber einen I/O Port zu
realisieren. Ich selbst bin Einsteiger, konnte hier im Forum aber
nichts weiteres zu SPI und Stopbit erfahren und verwende den STK500
(programmiere im AVR Studio mit Assembler). Verwenden moechte ich einen
AT90S8515 oder AT90S3213 (habe ich gerade bei mir).

Besten Dank

von Profi (Gast)


Lesenswert?

Hab mir das pdf durchgelesen, sind ja sehr interessant!
Grundsaetzlich duerften beide Arten der Ansteuerung gehen.
Nur: das Clk-Signal muss immer anliegen, deshalb wuerde ich die
Frequenz moeglichst niedrig waehlen.
Wenn keine Daten gesendet werden, muss DATA high sein, also FFF
senden.
Schau mal nach, ob die SPI Deines Procs auf 12 Bit einstellbar ist.
Dann waere alles sehr einfach. Wenn die 12 bits raus sind, Interrupt
ausloesen und neue Bits senden, wenn nicht zu senden ist, FFF senden,
damit Takt dableibt.
Wenn nur 8 Bit moeglich, musst Du zwei 12 Bit-Werte auf 3 Bytes
verteilen.
Zu Start und Stop: einfach, da Start immer low und Stop immer high
sind, d.h. einfach Byte um drei nach links schieben, mit 0x7ff andieren
(kann evtl. entfallen)(Start) und mit 0x003 oderieren (stop).

Bei Parity wirds ein wenig aufwendiger: manche Procs haben ein
P(arity)-Flag im Status-Register.

oder Du setzt Parity-Bit auf 1 oder 0 je nach odd bzw even, schiebst
den Byte-Wert 8mal durch Carry und invertierst das Parity-Bit jedes mal
mit XOR 0x004, wenn Carry gesetzt war.

ODER
Du laesst einen Periodic-Timer-Interrupt laufen, der CLK toggelt und
Data ausgibt (2 Portpins). Hier hat der Proc schon bedeutend mehr zu
werkeln.

ODER
Du kannst den Timer auf einem Port ausgeben (CLK), dann sparst Du dir
das sw-toggeln, und wenn nichts auszugeben ist, kann sofort ein RETI
kommen, oder Du laesst gar keine Timer-IRQs zu.

Eingelesen wird immer auf die fallende Flanke von CLK (s.Drawing 6.2:
Timing diagram) doch die Tsu/Thold besagen, dass mindestens 40ns vorher
und 10ns nach dem Fallen von CLK die Daten anliegen muessen, also vorher
Data anlegen, dann CLK auf low legen, dann erst Daten aendern.

Bitte schreibe uns, wie es Dir erging und was die Taster kosten!

von Michael (Gast)


Lesenswert?

Ist das nicht eher was für die UART im synchronen Modus anstelle der
SPI?
Michael

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.