Forum: Mikrocontroller und Digitale Elektronik Attiny13 Universeller Blinker


von Leo F. (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend,

Ich habe in den Ferien ein etwas größeres Programm geschrieben, einen 
Baustein mit dem Attiny 13, auf dem verschiedene (Blink-) Programme 
laufen, die durch ziehen entprechender Portpins auf Masse ausgewählt 
werden können.
PB0 ist der Ausgang für die LED,
PB1 wird  an einen Taster gegen GND geschlossen, INT0 als Interrupt
PB3:PB4 zum Auswählen der Modi, für LowPower und Sinus wird PB1 auf GND 
gelegt, da diese keinen Interrupt verwenden.
Als Taktquelle soll der WDT Oszillator mit 128kHz und 8 als Vorteiler 
verwendet werden.
Nach dem Power on Reset wird zunächst der Zustand relevanter Pins in das 
Register "Modus" eingelesen. Nach dem Vergleich mit den einzelnen 
Werten, die Pinb1:4 haben müssen, springt das Programm in den jeweiligen 
Modus und erledigt dort entweder gleich seine Aufgabe (LowPower und 
Sinus)oder geht in den Power Down Modus( An/Aus, Tast, BL50100) .
Die einzelnen Modi erklären sich folgendermaßen:

LowPower: Blinken mit sehr kleinem Tastverhältnis,ca. 1Hz, für geringen 
Stromverbrauch
Sinus: "Sanftes" Blinken (die Frequenz muss noch etwas angepasst werden)

BL50100: Durchschalt-Modus zwischen schnellem Blinken(ca.16Hz), 50% und 
Dauer-An

AnAus: Ein Interrupt INT0 schaltet An, der nächste Aus

Tast: An, solange Pb1 low ist

Ohne Vorwiderstand: Das gleiche wie BL50100 nur ohne 100%-Stufe, da LED 
ohne Vorwiderstand angeschlossen werden soll

Und nun zum eigentlichen Problem:
Das Ding tut nicht !
Nach dem Anschalten, egal bei welcher Kombination der Portpins, scheint 
das Teil alle Vorwiderstände zu aktivieren(LED leuchtet ganz schwach, 
obwohl zumindest der von PB0 im Programm wieder abgeschaltet werden 
sollte).
Es scheint also nicht einmal bis dorthin zu laufen.
AVR Studio gab beim Kompilieren keine Fehlermeldung und auch des 
Debuggen mit dem Simulator zeigte nichts.
Nun die Frage an die "Profis": Könnte jemand mal darüber schauen? (siehe 
Anhang)

Vielen Dank im Voraus, Leo

von Cyblord -. (cyblord)


Lesenswert?

Wie jetzt, du schreibst ein großes Programm, einfach so ausm Bauch raus, 
flasht es in den Controller und dann funktioniert es nicht?

Oh wunder.

Hast du denn keine Zwischenergebnisse überprüft? Kleine Schritte und 
jeden Schritt testen?

gruß cyblord

von spess53 (Gast)


Lesenswert?

Hi

>Ohne Vorwiderstand: Das gleiche wie BL50100 nur ohne 100%-Stufe, da LED
>ohne Vorwiderstand angeschlossen werden soll

??????

Kurze Frage: Von Timern hast du schon mal etwas gehört?

MfG Spess

von Herr M. (herrmueller)


Lesenswert?

Mit was programmierst Du denn einen Tiny mit 16KHz?
Wann meinst Du mit Vorwiderstand den Vorwiderstand und wann den PullUp 
Widerstand?

>PB1 wird  an einen Taster gegen GND geschlossen, INT0 als Interrupt
>PB3:PB4 zum Auswählen der Modi, für LowPower und Sinus wird PB1 auf GND
>gelegt, da diese keinen Interrupt verwenden.

Was denn nu?

Nach dem Aufwecken mit INT0 solltest Du den  INT0 IR wieder abschalten, 
damit er nicht immer wieder ausgeführt wird, dann sind auch die NOPs 
unnötig.
Vielleicht noch am Anfang den Port auf Eingang schalten.
Ansonsten schrittweise testen, falls Du überhaupt noch flashen kannst.

von Leo F. (Gast)


Lesenswert?

Oh, das hätte ich fast vergessen:

Ein nach dem Einlesen eingesetztes "ldi Modus, xxxxxxxxW" (steht für den 
"Wert" an PinB des jeweiligen Modus) lässt LowPower und Sinus Wunderbar 
laufen, bei den Anderen hapert es dort immer noch.
Wenn man direkt in einen der Modi, die einen Interrupt brauchen, 
springt, und den Interrupt somit umgeht, funktioniert es insofern, als 
dass einzelne Unterprogramme wie das Blinken, 50 und 100% laufen. Es 
scheint also

a) am Einlesen von PB1:PB4
 UND
b) daran zu hängen, dass ein Interrupt entweder nicht ausgeführt ODER 
danach nicht an die richtige Stelle gesprungen wird.

                    LG, leo

von Herr M. (herrmueller)


Lesenswert?

Wenn Du PB1 für den INT0 Interrupt freigeschaltet hast, wieso benutzt Du 
ihn gleichzeitig als Modus?

Du schaltest den INT0 schon frei, bevor Du den Pullup-Widerstand für PB1 
angeschaltet hast. Da hängt der Pin noch in der Luft.

von sebastian (Gast)


Lesenswert?

@cyblord: Das kenne ich so von japanern, die machen das auch. und dann 
ist immer riesen fragezeichen im gesicht wenns ned geht

von Herr M. (herrmueller)


Lesenswert?

Wenn die Pins unbeschaltet sind, sind alle auf 1 und es wird Sleep 
ausgeführt.

>und auch des Debuggen mit dem Simulator zeigte nichts.
Was heisst das - 'nichts' , war der Bildschirm an?

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.