Pizzatimer mit Timerproblem

OP Persönliche Seite #1816133
Lesenswert?

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.
Angehängte Dateien:
Gast #1816284
Lesenswert?

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
#1816295
Lesenswert?

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--;
   }
OP Persönliche Seite #1822831
Lesenswert?

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.
OP Persönliche Seite #1829990
Lesenswert?

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.
OP Persönliche Seite #1837500
Lesenswert?

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.
Angehängte Dateien:
#1837506
Lesenswert?

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.
OP Persönliche Seite #1837566
Lesenswert?

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.*
#1837573
Lesenswert?

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)
#1837658
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren