www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Serielle Ausgabe an einem Pin


Autor: S. N. (sp00ky-n1)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das USART-Interface hat fest zugeordnete Pins, was aber aus dem 
Datenblatt klar hervorgeht.

Wenn Du ein Soft-UART machen willst, dann findest Du hier im Forum 
einige Beiträge zum Thema (Suche...). Ein Schieberegister kann man sich 
auch bequem in Software machen.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, du willst sowas wie ein Software-UART implementieren. Dazu gibt es 
auch eine Application Note von Atmel, in der das Verfahren beschrieben 
ist.

http://www.google.de/search?hl=de&q=software+uart+...

Autor: S. N. (sp00ky-n1)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Vollhorst (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.