mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pizzatimer mit Timerproblem


Autor: Johannes Krumm (johngun) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Berit G. (berit)
Datum:

Bewertung
0 lesenswert
nicht 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--;
   }

Autor: Johannes Krumm (johngun) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes Krumm (johngun) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes Krumm (johngun) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes Krumm (johngun) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.*

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Johannes Krumm (johngun) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes Krumm (johngun) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich wollte ja noch ein Bild zeigen.
Der Pizzatimer 2313.
Ist eine schöne Betaversion.

Autor: Didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und da kommt die Pizza hinein?
Kleiner Scherz-
Jetzt in kleinem Kunststoffgehäuse mit LCD ; )

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.