Forum: Mikrocontroller und Digitale Elektronik Daten auf einer Leitung Senden


von Karsten B. (k-duke)


Lesenswert?

Seid gegrüßt liebe Elektronik-Freunde,

nach langer Zeit habe ich mich mal wieder an ein kleines Projekt gewagt 
und stecke nun bereits fest.
Ich habe vor Daten über eine Leitung zu senden, also Daten und Clock auf 
derselben. Ich habe mir das für mich so zusammengebastelt, dass Ich den 
Pegel des Pins am uC auf High setze und dann entweder zwei OVF0 für ein 
gesetztes bit, bzw. ein OVF0 für ein nicht gesetztes Bit warte, bevor 
ich den Pegel des Pins wieder auf Low ziehe.

Das ganze funktioniert schon wunderbar. Ich habe ein 
Soundkarten-Oscilloscop an den Controller angeschlossen und das zu 
sendende Byte, welches ich Hardcoded habe wird auch wunderbar 
übertragen, sobald ich den Taster, welcher das Senden startet betätige.

Das einzige Problem ist nur, dass der uC nicht mehr aufhört Daten zu 
senden.
Mir ist klar, dass es durchaus passieren kann, dass in der Zeit, in der 
ich den Taster betätige die Sende-Sequenz mehrmals durchläuft. Jedoch 
hört der uC selbst nach einigen Sekunden nicht auf zu senden, was 
insbesondere verwirrend ist, da im AVR-Simulator alles Reibungslos 
klappt.

Hier noch die Randdaten:
Genutzter uC:            attiny2313
Genutzter Compiler:      avr-gcc
Genutzte IDE:            AVR-Studio
Genutztes Testboard:     Atmel Evaluation Board 2.0 von Pollin.
Genutztes "Oscilloskop": Soundkarte mit Spannungsteiler auf Breadboard
                         mit Christian Zeitnitz' Programm
                         (http://www.zeitnitz.de/Christian/index.php?sel=scope_de)

Ich würde euch fragen, ob Ihr so gnädig sein würdet mal einen kurzen 
Blick auf meinen (durchgehend kommentierten) C-Code zu werfen?
Dieser ist als C-Datei an diesen Post angehangen.

Wahrscheinlich übersehe ich etwas total marginales.

mit freundlichen Grüßen
Karsten B.

von willi (Gast)


Lesenswert?

sorg erstmal softwaremäßig dafür das du wirklich nur einmal sendest, so 
kannst du dann bestimmen ob der fehler im µC oder vielleiciht im pc ist

von Gast (Gast)


Lesenswert?

Da gibts auch schon was: 1-wire
Falls du das ganze nicht neu erfinden willst.

von Karsten B. (k-duke)


Angehängte Dateien:

Lesenswert?

Mir ist grad aufgefallen, dass der Quellcode gar nicht mitgekommen ist 
hehe X-D

@willi
Am PC liegt es eindeutig nicht. Ich habe an dem Pin zusätzlich eine LED 
zum Testen mal angehangen. Es macht keinen Unterschied, ob das 
Soundkarten-Oscilloskop dran hängt oder nicht.
Darüber hinaus versuch ich es ja, dass es Softwaremäßig nur ein mal 
sendet :-)

@Gast
An sich funktioniert ja das, was ich habe wie 1-Wire.
Nur die Timings sind anders und das Signal ist invertiert.

mit freundlichen Grüßen
Karsten B.

PS: Hoffe diesmal kommt die Datei mit ^^

von Karsten B. (k-duke)


Lesenswert?

Habs inzwischen schon rausgefunden.

Wie gedacht war das Problem mal wieder so einfach, dass man den Wald vor 
lauter Bäumen nicht sehen konnte.

Ich hatte ja beschrieben, dass der interne Pull-Up im uC angeschaltet 
ist, jedoch hab ich nicht dran gedacht, dass die Taster am Atmel 
Evaluation Board 2.0 von Pollin externe Pull-Downs hat. Dass das dann 
nicht klappt mit internem Pull-Up ist klar rot-werd.

mit freundlichen Grüßen

Karsten B.

PS: Wer interesse an dem von mir geposteten Code hat kann diesen gerne 
nutzen!

von Peter D. (peda)


Lesenswert?

Karsten B. schrieb:
> ist, jedoch hab ich nicht dran gedacht, dass die Taster am Atmel
> Evaluation Board 2.0 von Pollin externe Pull-Downs hat.

Dann löte mal schleunigst die Kondensatoren an den Tasten raus.
Die ergeben schöne Spikes auf VCC, wenn sie beim Drücken schlagartig 
geladen werden.
Hier wurden deshalb schon "mysteriöse" Resets berichtet.


Peter

von Karsten B. (k-duke)


Lesenswert?

Hi Peter,

hm... hatte mir bis jetzt noch nie wirklich angeschaut, wie das Board 
aufgebaut ist. Wieso setzt man denn Kondensatoren an Taster?
Sollen die etwa zur Entprellung dienen?

Seltsame Idee wie ich find.

mit freundlichen Grüßen

Karsten B.

von maddin (Gast)


Lesenswert?

Nur so als Hinweis, Suchwort LIN Bus. Man muss ja nicht das Protokoll 
nutzen, es geht ja auch mit einem uart und dem LIN Tranceiver...

Gruß,
m.

von Karsten B. (k-duke)


Lesenswert?

@maddin

Danke für den Hinweis... LIN-Bus kannte ich noch gar nicht.
Aber an sich versuche ich mein eigenes Ding zu entwickeln, nicht weil 
ich denke, dass ich dies besser kann als studierte Akademiker, sondern 
um mich mindestens einmal mit Problemen solcher Entwicklungen 
auseinandergesetzt zu haben.
Das hat den Vorteil, dass man an sich wächst, was (bei mir) nicht so 
schön funktioniert, wenn man bereits ausgeklügelte Patentlösungen 
anwendet.
Dennoch werde ich mir den LIN-Bus ebenfalls zu Gemüte führen, um weitere 
Anregungen und Ideen zur Realisierung einer Ein-Draht-Datenübertragung 
in Erfahrung zu bringen.



Ich möchte nur noch mal klarstellen, dass ich nach Ansätzen gesucht 
habe, warum das Signal nicht abbricht, was ich vorerst in der Logik 
meines Quelltextes vermutet habe und nicht nach einer bestehenden Lösung 
für eine Ein-Draht-Datenübertragung. Es tut mir wirklich leid, falls 
dies aus meinem Startpost heraus nicht erkenntlich war.
Es hat sich halt herausgestellt, dass ich einen internen Pull-Up an 
einem Taster aktiviert habe, der einen Pull-Down hat.

Ich würde damit behaupten, dass der Thread damit abgeschlossen ist.

@Peter
Noch mal vielen Dank für den Hinweis auf die Kondis an den Tastern. Dies 
wird mir wahrscheinlich noch viel Ärger ersparen.

@all
Nochmal vielen Dank für die konstruktiven Beiträge ^^

mit freundlichen Grüßen
Karsten B.

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
Noch kein Account? Hier anmelden.