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