Serielle Ausgabe an einem Pin

OP #881632
Lesenswert?

Hallo,

ich habe hier einen ATMega 169 und würde gerne seriell Daten an einzelne 
Pins von Port F schreiben. Das Problem ist, das ich leider keine Ahnung 
habe, wie ich die parallelen Daten in serielle Daten bekomme?
Hab im Datenblatt geschaut, ob es so was wie ein Schieberegister gibt, 
hab aber keins gefunden. Das einzige was ich gefunden hab, war die 
USART-Schnittstelle...
Daher meine Frage: Kann ich die USART benutzen, um meine parallele Daten 
seriell an einen Pin von Port F auszugeben? Und wenn ja, wie bekomme ich 
die seriellen Daten dann auch wirklich an Port F? Im Datenblatt habe ich 
da noch net wirklich was zu finden können...

Über Antworten wäre ich sehr dankbar.
Gruß,
Sebastian.
OP #882059
Lesenswert?

Ok, habe mir jetzt ein Schieberegister in Software programmiert. Es wird 
mit jedem Takt ein neuer Wert an den entsprechenden Pin des Ports 
geschoben.
Das zweite, immer noch ungelöste Problem ist, dass ich leider nicht 
wirklich weiß, wie ich auf einen anderen Pin nun noch meinen Systemtakt 
legen kann.

PS: Das ganze dient dem Ansteuern einer 7-Segment Anzeige über einen 
CPLD. Der ist mit drei Pins am Port mit meinem µC verbunden. Ich schiebe 
also die Daten fröhlich auf den entsprechenden Pin, das bringt mir aber 
nix, solang ich keinen Takt an dem entsprechenden anderen Pin habe...
Gast #882244
Lesenswert?

Tag.

Du musst ja nicht zwingend den Systemtakt nehmen, ein geringerer Tuts 
wahrscheinlich auch. Also einfach den CLK Pin des CPLD von Hand 
Toggeln...



Wenn das ding bei steigender und fallender Flanke die Daten übernimmt:

void send_byte(unsigned char data)
{
  pinCLK = 0;
  pin1 = data&0x01;
  pinCLK = !pinCLK;
  pin1 = (data>>1)&0x01;
  pinCLK = !pinCLK;
  pin1 = (data>>2)&0x01;
  pinCLK = !pinCLK;
  etc.
}

Wenn nur bei steigender:

void send_byte(unsigned char data)
{
  pinCLK = 0;
  pin1 = data&0x01;
  pinCLK = 1;
  pinCLK = 0;
  pin1 = (data>>1)&0x01;
  pinCLK = 1;
  pinCLK = 0;
  pin1 = (data>>2)&0x01;
  pinCLK = 1;
  pinCLK = 0;
  etc.
}

Für alle könner: NICHT SCHÖN ABER ES FUNKTIONIERT! :)

grüße

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