Forum: Projekte & Code 3x7 Segment und 1 I/O-Pin (Assembler)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ibsimed1 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
nachdem ich mich vorwiegend mit ATTiny´s beschäftige:
Anbei die Hardware+Assembler-Software für eine 3-Stellige 7-Segment 
Anzeige, die mit nur einem I/O-Pin eines beliebigen ATMELS angesteuert 
werden kann.
Jetzt höre ich schon Stimmen : Man kann eine solche Anzeige auch mit 
einen "grossen" ATMEL ohne zusätzliche Hardware und mittels 
Software-Multiplexing lösen.
Stimmt.
Mich reizte aber die Hardware-Lösung -> ATTiny´s haben nun einmal wenig 
Beine !!
Änderungsvorschläge/Wünsche ?
Viel Spass damit !

von Karl H. (kbuchegg)


Lesenswert?

Anmerkung:

Es handelt sich dabei um eine Schieberegisterkette, deren
Clock Versorung trickreich mit der Datenleitung verwoben
wurde.

von Stephan H. (stephan-)


Lesenswert?

warum nicht ?? Gute Idee.

von Ibsimed1 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Karl Heinz,hallo Hard/Softwarefans,
richtig : Trickreich, wie Karl Heinz geschrieben hat.Und ich finde 
diesen Trick wirklich genial.
Leider ist dieser Trick nicht von mir, sondern er ist aus einem Artikel 
aus der EDN.Um unnötiges Kopfweh zu vermeiden möchte ich kurz die 
Funktion des RC-Filters erklären (Oszillogramm siehe Oszi.jpg)
Erst einmal bitte merken, daß der 74HCT164 die Daten an Pin1/2 mit der 
positiven Flanke des Clocksignals übernimmt !
Auf dem Bild ist die obere Kurve das Datensignal an Pin 1/2, die untere 
der Clock auf Pin 8.
Starten wir also das Bild von der linken Seite und arbeiten uns nach 
rechts durch:
Am Anfang sind beide Signale (Clock und Data) auf "1".Wenn eine "0" 
geschrieben werden soll, so stellt die Software den Ausgangspin des AVR 
auf "0" und wartet einige Zeit.Durch diese "0" am Ausgangspin wird der 
Kondensator über den Widerstand entladen.Nach einem Software-Delay wird 
nun der Ausgangspin kurz auf "1" geschalten.Durch den entladenen 
Kondensator und den Clock von "0" auf "1" wird nun eine "0" in den 
74HCT164 geschrieben.Wie man am Datensignal sieht, wird der Kondensator 
durch die "1" des Clock-Pulses kurz aufgeladen.Dies stört aber nicht, da 
das Datensignal bei der "0"->"1" Flanke ja "0" war.
Soll eine "1" geschrieben werden, so wird der Ausgangspin des AVR eine 
bestimmte Zeit auf "1" gesetzt, der Kondensator lädt sich daher in 
dieser Zeit auf die +5V auf.Nach dem Delay wird der Ausgangspin auf "0" 
und dann gleich wieder auf "1" gesetzt.Mit dieser "0"->"1" Flanke des 
Clocks wird nun eine "1" in den 74HCT164 geschrieben.
Nun kommt der "Drop" in´s Spiel.Hier ist die zeitliche Limitation der 
Funktion zu sehen:Während es beim "0"-schreiben nicht weiter stört, wenn 
sich der Kondensator kurz auflädt, so stört es aber beim "1"-schreiben, 
wenn sich der Kondensator zu weit entlädt.Das Datensignal muß auf jeden 
Fall noch über der "1"-Schwelle des IC´s bleiben, um als "1" erkannt zu 
werden.Mein Software-Treiber schafft mit den in der Schaltung 
angegebenen Dimensionierung des RC-Gliedes einen Clock-Frequenzbereich 
von 500 KHz bis 8MHz.Bei einer Taktfrequenz unter 500 KHz ist der "Drop" 
so stark, daß keine "1" mehr erkannt wird, weil sich der Kondensator zu 
weit entlädt.Man muß also in dieser Situation das RC-Glied modifizieren.
Bei einer Clock-Frequenz über 8MHz muß der Delay in der Software 
verlängert werden, weil sich sonst der Kondensator nicht vollständig 
entladen/laden kann.
So,ich hoffe, meine Erklärung war nicht zu langatmig und hat zum 
Verständnis beigetragen.
Ich finde dieses RC-Glied aber trotz alledem EINFACH GENIAL!!
Liebe Grüße aus Wien

von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe mir nicht alles angesehen, aber auf Deinem Oszillogramm wird 
meiner Meinung nach nicht 0-1 sondern 0-0-1 geschrieben. Die von Dir 
nicht markierte L/H-Flanke in Bildmitte schreibt doch auch auch eine 0.

Ich habe gerade mal kurz in den Source geschaut, die Idee ist gut.
Es wird die Leitung auf den Pegel des zu sendenden Bits gesetzt.
Dann wird gewartet, damit der C sich auf den gewünschten Pegel für DI 
einstellen kann. Am Ende der Wartezeit gibt es einen x/L/H-Impuls.
x ist der Zustand, der durch das Bit vorgegeben ist.

Dabei gibt 2 Möglichkeiten: es soll eine 0 geschrieben werden, dann ist 
der Zustand der Leitung L und es gibt nur eine L/H-Flanke.
War der Zustand H, weil eine 1 geschrieben werden soll, gibt es einen 
H/L/H-Impuls.

Jetzt kommt das nächste zu sendende Bit: ist es 1, bleibt die Leitung H, 
ist es 0, wird sie auf L gesetzt und wir sind wieder am Anfang.

Gruß aus Berlin
Michael

von Ibsimed1 (Gast)


Lesenswert?

Hallo Michael,
natürlich hast Du recht.Ich wollte aber nur den Unterschied zwischen 
"0"-Schreiben und "1"-Schreiben darstellen.Auf dem gesamten Oszi-Bild 
wird also tatsächlich "0"->"0"->"1"->"0" geschrieben.
Wie gesagt, die Grundidee ist nicht von mir.Bin aber begeistert, was man 
mit einem R und einem C so alles anstellen kann.
Danke für Dein Interesse !
Liebe Grüße

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.