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.