Seltsame Effekte am Attiny2313

Hallo Gruppe,

ich habe gerade etwas merkwürdiges mit einem meiner ATtiny2313s festgestellt: für eine Sekundenanzeige habe ich eine zweistellige Siebensegmentanzeige verwandt. Da der Tiny (fast) nichts macht, ewig viel Flash und Portpins verfügbar hatte und ich gerade keinen 7447 zur Hand hatte, kam mir eine grandiose (?) Idee: ich habe alle Kathodenpins über Vorwiderstände an sieben Portpins geschaltet. Die zwei Anodenpins direkt an Portpins. Dann wollte ich die einzelnen Leuchtsegmente multiplexen (also nicht nur die ganze Anzeige, sondern wirklich die einzelnen Segmente). Dass ich dafür die Vorwiderstände auch an die Anodenleitungen hängen hätte können ist mir erst später aufgefallen... aber naja.

Das ganze funktioniert auch einigermaßen gut, aber wenn ich beispielsweise so eine Verzögerungsschleife einbaue:

void delay(unsigned char how) { unsigned char x, y, z; for (x=0; x

Reply to
Johannes Bauer
Loading thread data ...

Johannes Bauer schrieb:

Es könnte daran liegen, dass du kein Konzept hast.

Dafür nich, Jens

Reply to
Jens Carstens

Ich kann Dir zumindest sagen, weshalb Du keine vernünftigen Antworten bekommen wirst (auch wenn mein Vorposter vielleicht lieber im Heise-Forum spielen gehen sollte): Keiner kennt den Inhalt Deiner ominösen "Display_Single"-Funktion, daher wird's schwer mit dem Antworten. Dir sei verziehen, wenn Du irgendwelche fertigen Umgebungen vewendest, die zufällig die 7-Segment-MPX-Funktion mitbringen, dann müsstest Du das aber erwähnen. So gehe ich davon aus, dass Du Dir eine Funktion gebastelt hast, uns nicht verrätst, wie sie aussieht und fragst, warum sie nicht das tut, was Du willst. Zu der Verzögerung: wo hast Du die Verzögerung eingebaut? An den Anfang, hinter ne Endlosschleife, mitten in die Multiplexroutine? Ich vermute Letzteres, vielleicht auch unbewusst. Sei Dir bitte im Klaren darüber, dass auf Deinem AVR kein Multitasking-OS läuft, wenn Du das Multiplexing nicht sauber mit Interrupts löst, wird jede Programmzeile Einfluss auf das Displaytiming und damit auf Helligkeit (bis runter zu ganz dunkel...) haben!

Reply to
Stefan Huebner

[...]

Ja, du hast Recht. Tut mir leid, es war gestern... spät.

Die Funktion selber ist recht unspektakulär. Im Prinzip hängen an PD0 und PD1 die Anoden der 7-Segementanzeige (die ich als Stromsenke benutze, DD ist Output) und an PB0-PB4 sowie PD5 und PD6 über Widerstände die einzelnen Segemente. Pro aktivem Segment fließt ca. 1mA Strom.

In der momentanen Programmvariante setzt Display_Left PD0 auf "1" und PD1 auf "0":

PIND &= ~(1

Reply to
Johannes Bauer

Argh, verdammt!

Ja, es hat einen Effekt. Aber einen sehr, sehr, seltsamen...

Viele Grüße und vielen Dank, Johannes

Reply to
Johannes Bauer

Am Sat, 31 Dec 2005 13:03:43 +0100 schrieb Johannes Bauer :

Ich habe schonmal sehr seltsame Effekte beim schreiben auf Eingangspins (Tri-State, Datenrichtung falsch gesetzt) gehabt: bei kleiner Last reicht die Koppelkapazität im Chip, daß man abklingende RC-Pulse (Hochpaßverhalten) am Oszi sehen konnte. Bei meinen ersten Display Multiplex-Versuchen hatte ich auch Geisterbilder auf der Nachbarstelle. Die kurze Zeut zw. Umschalten der Anode (Stelle) und der Segmente hat trotz Assemblerprogramm gereicht, ein wahrnehmbares Bild zu erzeugen, obwohl ich die Segmentmuster immer als ganzes Byte und nicht bitweise geschrieben hatte. Die Lösung war: Zuerst die Segmentausgänge ausschalten, dann die Stelle umschalten, dann die Segmente mit dem neuen Muster einschalten. Braucht halt ein zwei Takt-/Maschinenzyklen mehr.

--
Martin
Reply to
Martin

Vielleicht noch eine Erfahrung dazu:

Wenn Pins als Eingang programmiert sind, kann man durch das Beschreiben=20 desselben mit einer 1 eine Stromquelle aktivieren. Diese zieht den Port=20 dann langsam aber sicher hoch (je nach Beschaltung). Gedacht ist das zum einsparen von Pull Up Widerst=E4nden, kann einen aber= =20 geh=F6rig narren. Ganz informativ dazu sind die Datenbl=E4tter, die beschreiben die=20 einzelnen Pins als Blockschaltbilder.

Guten Rutsch!

Gru=DF Hans

Reply to
Hans Müller

Das passiert aber durch beschreiben des PORTx-Registers - nicht durch PINx. Schreiben auf PINx ist laut Datenblatt nicht definiert.

--
Mfg
Thomas Pototschnig
 Click to see the full signature
Reply to
Thomas Pototschnig

Hallo nochmal,

wollte mich nur nochmal für die freundliche Hilfe bedanken, hab jetzt mein Gerät fertiggestellt: ist übrigens ein selbergebautes Belichtungsgerät (im Scannergehäuse), mit coolen "deluxe" Features: kein Stromverbrauch im Standby-Betrieb (Primärseitige Trennung), Letzte Belichtungsvorwahl wird gespeichert, Messung der Belichtungsstärke (weil die Röhren der Höhensonne nicht immer gleich anspringen -> immer gleiche Belichtungsstärke) und eben die Restzeitanzeige auf den

7-Segmentanzeigen. Geht alles hervorragend! :-)) Hatte eben nur mit dem PORT/PIN ein Brett vorm Kopf.

Viele Grüße, Johannes

Reply to
Johannes Bauer

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.