Hallo, wie kann ich ein 16 Bit Wort seriell über einen Portpin ausgeben? Vielen Dank
UART, 1-Wire, PWM, diverse IR-Codes, .... Such Dir was aus. Peter
Jörg Wunsch wrote:
> SPI hast du noch vergessen. Macht eigentlich genau das.
Aber SPI braucht mindestens 2 Pins.
Hallo Paul, in einem Projekt hatten wir mal untiges Verfahren für den Master und die Debug-Ausgabe verwendet, alledrings haben wir nach einem Byte schon den Bus wieder mit Strom versorgt und der Master hat, wenn ein Slave senden sollte ein Start-Bit gesendet. void outputSerial(UInt16 value) { UInt8 bitPos; setPin(On); // Default Zustand for(bitPos=0; bitPos<16; bitPos++) { setPort(Off); sleep(a); if(value & 1 == 1) { setPort(On); } Sleep(b); setPort(On); sleep(c); value >> 1; } } Die Einsen und Nullen hatten wir in die Länge des Aus-Zustandes codiert, weil wir auf der anderen Seite anhand der Fallenden Flanke wissen wollten, dass ein neues Bit herein kommt. Dann haben wir geprüft ob es "lange" oder "kurz" aus war. Während der Zeit C hatten die Slaves Zeit dieses Bit entsprechend zu verarbeiten und auf das nächste Bit zu warten. Wir haben auf der Slave Seite (etwa Faktor 10 langsamer als der Master, Assembler verwendet und die Sleeps durch einige handverlesene NOPs realisiert. Wenn der Bus über einen Pullup auf "High" gezogen wird, können alle Teilnehmer des Busses senden und empfangen. Wenn man dann noch dafür sorgt, dass der Master den Pullup in gewissen Fenstern überbrückt, können in dieser Zeit auch die Stützkondensatoren der Slaves geladen werden und die Slaves erhalten über diese Leitung auch ihren Strom. Grüße, Thorsten
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.