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
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
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
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.
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
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.
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?
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.