Da mein Sohn seine Pizza immer so lange im Ofen lässt bis der Rauchmelder piepst, bin ich angefangen, einen Pizzatimer zu bauen. Ich hab mich heute Nachmittag schon geärgert weil ich auf falsche Vorbilder reingefallen bin. Wo der Startwert des Timers hingehört weis ich jetzt und ich kann ihn auch so konfigurieren das nur am 2. Weihnachtstag ein Timmerint. kommt. Ich krieg es aber immer noch nicht hin das er in meiner Schaltung pro Minute ein Led löscht. Bascom List Schaltung und mein gedachter Ablaufplan im Anhang. Zu sehen it erstmal die eine Sekundenversion, ich bitte um Hilfe und Anregungen. Meine Schaltung läuft mit 20 LED´s an 10 Ports. Das setzten und löschen hab ich noch recht umständlich gelöst. Es geht mit Sicherheit eleganter wenn man die Daten aus Tabellen zieht. Das aber später. Piepser und Stellknopf fehlen noch, krieg ich aber hin. Glaub ich jedenfalls.
Als erstes setzt Du mal in jede Leitung vom MC zu den LEDs einen Vorwiderstand (z.B. 330R). Und dann setzt Du fürs Multiplexen einen Timerinterrupt auf. Peter
Hi >Als erstes setzt Du mal in jede Leitung vom MC zu den LEDs einen >Vorwiderstand (z.B. 330R). Da steht: 'Alle Leds mit eingebauten Vorwiderstand'. Aber ein Kondensator zwischen VCC und GND, dicht am AVR, könnte nicht schaden. MfG Spess
Hi, stell den Interrupt deines Timers über einen Compare-wert auf bspw. 2ms. dann schreib in die Timer ISR die Abfrage einer Zählvariable. Bei 2ms hätte die Variable einen Wert von 30000. 30000x2ms=1 Minute. also etwa so: if (zaehler==0) { //LEDs setzen zaehler=30000; } else { zaehler--; }
Nochmals vielen Dank für den Tip mit dem Kondensator. Ich hatte ja auch gepostet: Das Ding hängt gelegentlich. Ich lasse zur Zeit nur ein Led leuchten und das Programm mit kurzem Wait in Schleifen bis auf kein Led abarbeiteten wird. Ich hab nähmlich noch einen Tastar eingebaut der via Interupt eine Variable runterzält und ich auf der gewünschten Zeit einspringe. Eier werden nämlich bei 20 Minuten verdammt hart. Das mit dem Interupt hab ich jetzt kapiert. Das funzt nur wenn das Programm läuft und nicht auf Wait steht. Jetzt kommt erstmal das schwirigste. Ich muss mich um das Design kümmern, an Colanie komm ich nicht ran aber es muss optischansprechend aussehen. In der Zwischenzeit hab ich dann nochmal viel Zeit zu nachdenken. Ichweis nämlich auch noch nicht wie Compare geht. Anmerkung : Wait scheint unhabängig vom Prozessor Takt sehr genau zu sein. 2 - 3 Sekunden in 20 Min stören mich nicht.
So die elegante Lösung schaffe ich auch. Mit den gleichen Befehlen nur alles nochmal neu gemacht. Der Bascom-SImulator hat mir nicht weitergeholfen. Ist auch für die Tonne. Aus diesem Grund habe ich ein Testboard genommen und ein Terminal angeschlossen. Überall in die Schleifen und Timeroutinen hab ich Prints reingesetzt und die Variblen mit Text ausgegeben damit ich sehen kann was wo passiert. Wenns endgültig läuft werde ich alles nochmal posten mit Video im Zeitraffer. Der Pizzatimer2313 ist nämlich genau das worauf die deutsche Hausfrau schon immer gewartet hat.
Geht jetzt. Programm neu geschrieben. An der Hardware ist ein Lautsprecher für "If Pizza fertig then Lärm" dazugekommen. Weiterhin ein Taster mit dem ich via Interupt die Minuten-Variable runterzählen kann, falls der Pizzatimer mal zur Eieruhr wird. Mit Timerinterrups weiß ich jetzt Bescheeeeeiiiiiiiiiiiid.
Johannes Krumm schrieb: > Mit Timerinterrups weiß ich jetzt Bescheeeeeiiiiiiiiiiiid. Schön. Dann schau dir als nächstes an, wie das Binärsystem funktioniert, wie man mit Schiebeoperationen Dinge erreichen kann oder schau dir wenigstens an, wie Arrays in BASCOM funktionieren. Selten etwas so umständlich Programmiertes für eine derart einfache Aufgabenstellung wie 'n LED in einer Reihe sollen leuchten, wobei n variabel ist' gesehen.
Hatte ich schon drüber nachgedacht. Hätte ich auch schon geschafft wenn es 8 bzw 16 LED´s gewesen wären. 8 bit von einem port und 2 bits vom nächsten hab ich binär nicht gebacken bekommen. Von dem einem Port benutz ich ja auch noch zwei bit um oben und unten zu wechseln. Mit einem mC der mir drei ganze Ports zur Verfügung stellt hätte ich glaub ich auch weniger tricksen müdssen. Trotzdem Schieberegister und Arrays werden und müssen mein übernächstes Thema sein. Wegen der Laufanzeige. Müsste ich sonst mit einem alten Postrelais machen. *Für Musterlistings bin ich dankbar.*
Johannes Krumm schrieb: > 8 bit von einem port und 2 bits vom nächsten hab ich binär nicht > gebacken bekommen. Von dem einem Port benutz ich ja auch noch zwei bit > um oben und unten zu wechseln. Macht ja nichts. Denn muss dein nächstes Lernziel sein: Wie kann ich gezielt an einem Port ein Bit setzen bzw. löschen ohne die anderen Bits zu beeinflussen? Der Weg führt über die binären Operationen UND, ODER und NICHT (wie die in BASCOM heißen weiß ich nicht)
Schau noch mal auf die Schaltung am Anfang des Fadens. Ich schalte 20 LED´s mit 12 Pins. Es ist ein ständiger Wechsel zwischen ein und aus.
Johannes Krumm schrieb: > Schau noch mal auf die Schaltung am Anfang des Fadens. > Ich schalte 20 LED´s mit 12 Pins. > Es ist ein ständiger Wechsel zwischen ein und aus. Ist auch nichts Anderes als eine einfachere Version von 32 Leds die in 4 Stück 7-Segment-Anzeigen optisch anders angeordnet sind. Deswegen benötigst du trotzdem immer noch Einzelbit Operationen und damit die Kentnisse über UND, ODER bzw. NICHT und .. natürlich die Fragestellung: Wie macht man sinnvoll einen Multiplex? Die eigentliche Fragestellung: Wie kann ich ein Band aus n-LEDs erzeugen, wird dadurch sogar eher noch einfacher :-) Der Schlüssel liegt darin, die Erzeugung des LED-Bandes von seiner Anzeige zu trennen. Aber lassen wirs damit gut sein. Dein Programm funktioniert, du hast dir was überlegt und es umgesetzt und das ist gut so. Das es auch einfacher ginge, wäre eine gute Motivation weiter zu machen und sich nicht auf 'funktioniert' auszuruhen. Mehr aber auch nicht.
Ich wollte ja noch ein Bild zeigen. Der Pizzatimer 2313. Ist eine schöne Betaversion.
Und da kommt die Pizza hinein? Kleiner Scherz- Jetzt in kleinem Kunststoffgehäuse mit LCD ; )
>Eier werden nämlich bei 20 Minuten verdammt hart.
Stimmt garnicht. Ich hab jetzt mal ein Ei kochen lassen und nach einer
Stunde! ist es immer noch nicht weich.
FLo
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.