www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik "Langzeit"-Timer


Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! Wie bekomme ich einen "Lang"zeit-Timer (so ca. 5-10 Sekunden)
mit dem AVR hin?
Sinn und Zweck ist ein Softstart für die Heizung in einem
Röhrenverstärker, d.h. nach der eingestellten Zeit soll ein port auf
High gehen und ein Relais schalten, welches einen Widerstand
überbrückt. Prinzipiell ginge das zwar auch einfacher und schneller mit
einem NE555, aber da der Verstärker wohl demnächst sowieso eine
Ansteuerung Fernbedienung bekommen soll könnte ich auch alles in einem
Chip integrieren. Softstart ginge zwar sicher auch per Phasenanschnitt,
allerdings habe ich dann sicher beim Start ein ungesundes Brummen
drauf.


Gruß, Hase

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas macht man mit einem Heißleiter im Heizkreis...

Im AVR nimmt man einen Timer (Interrupt) und zählt in der ISR ein
Register hoch (oder runter). Reicht ein Register nicht, so kann man
mehrere Register kaskadieren. Einfach bei Überlauf des niederwertigen
das höherwertige erhöhen (vermindern).

...

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt gut, werde das mal probieren.

@Heißleiter: Nee, zu unmodern ;-).

Autor: Quacks (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, unmodern?

Aber so wird erst geschaltet wenn eine bestimmte Temperatur tatsächlich
erreicht ist und dies ohne großen Aufwand.

Gruß

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Geschaltet" wird da eigentlich garnicht, sondern kompensiert. Es
kommt ja ein (auf den Heizkreis abgestimmter) Kompensationsheißleiter
zum Einsatz. So wie der Widerstand der Heizwendeln (Kaltleiter) steigt,
so verringert sich der Widerstand des Heißleiters.

...

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void pause(int);
volatile int timercounter;

INTERRUPT(SIG_OVERFLOW2)      //Pausefunktion
{
TCNT2 = 0;
timercounter++;
}

int main(void)
{
 pause(10);//

 return 0;
}

void pause(unsigned int zeit)
{
  TCNT2 = 0;
  TIMSK  |= 0b01000000;    //Timer Overflow Interrupt enable
  TCCR2 = 0b00000101;
  timercounter = 0;
  while(timercounter < zeit);
  TIMSK  &= 0b10111111;    //Timer Overflow Interrupt disable
}

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.