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.
@cyblord: Das kenne ich so von japanern, die machen das auch. und dann ist immer riesen fragezeichen im gesicht wenns ned geht
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.