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 !
Anmerkung: Es handelt sich dabei um eine Schieberegisterkette, deren Clock Versorung trickreich mit der Datenleitung verwoben wurde.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.