16Bitwort über ein PORTPIN ausgeben?

Gast #550060
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren