www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Steuerung el. Fensterheber


Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche mich gerade an einer Steuerung für vier elektrische 
Fensterheber in einem PKW. Die Fenster sollen beim Antippen des Tasters 
für 8 sec. angesteuert werden, aber beim Halten des Tasters nur für die 
Dauer des Tastendrucks laufen. Das Ganze soll mit allen Fenstern zur 
selben Zeit funktionieren. Meine Kentnisse auf diesem Gebiet beschränken 
sich derzeit auf Tutorial und Learning by Doing...
Unter tatkräftiger Mithile von Uwe und Stefan 
(http://www.mikrocontroller.net/forum/read-1-9120.html) ist bereits der 
Code im Anhang entstanden. Er unterstützt z.Zt. nur die automatische 
Funktion bei zwei Fenstern. Mir stellen sich gerade zwei Fragen:

1. Läuft das AVRStudio in Echtzeit? Bis zum Haltepunkt am Timer-INT 
dauerts >10 sec.

2. Hat jemand eine Idee mit der ich feststellen kann, ob der Taster über 
0.5 sec gedrückt wurde? Was passiert, wenn ich zwei Taster gleichzeitig 
längere Zeit gedrückt halte?

Vielen Dank,
Matthias

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Stackpointer möglichst zuerst setzen !
Auf alle Fälle aber vor dem SEI, sonst stürzt Dir schon der 1. Interrupt 
ab.


Peter

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe jetzt

ldi tmp, RAMEND
out SPL, tmp

direkt an den Anfang der RESET-Routine geschrieben, noch vor SEI. 
Vielleicht kann mir jemand erklären, warum das so sein muss.

Daneben bin ich nach wie vor am oben beschriebenen Problem zu Gange. Ich 
möchte es mit einer art "Timertabelle" aus mehreren Registern lösen, die 
alle 100 ms incrementiert werden. Wie bringe ich dem Ding (AT90S4433) 
bei, alle 100 ms einen INT auszuführen, der in einer eigenen Routine die 
Register hochzählt??

Gruß,
Matthias

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stack: http://www.mikrocontroller.net/tutorial3.htm

Das Programm im AVR-Studio läuft nicht in Echtzeit, sondern bestimmt 
1000mal langsamer.

Für deine Zeitsteuerung kannst du den Timer 1 des AVRs nehmen. 
Angenommen du hast einen 4 MHz-Quarz, dann stellst du den Prescaler z.B. 
auf 1024 ein und das Output-Compare-Register auf 390. Der 
Compare-Interrupt wird also ungefähr 10 (=(4000000/1024)/390) mal pro 
Sekunde aufgerufen. In diesem Interruptaufruf kannst du nun irgend ein 
Register immer um 1 erhöhen.

Beispiel (Pseudocode) für nur ein Fenster:


timerinterrupt:
  zählregister++

hauptschleife:
  wenn taste gedrückt
    |temp=zählregister
    |fenstermotor an
    |
    |während zählregister<temp+5 //0,5 Sekunden
    | |warte
    |
    |wenn taste nicht gedrückt
    | |ganzrunter=1
    |sonst
    | |während taste gedrückt
    | | |warte
    | |fenstermotor aus

  gehe zu haupschleife


Hoffe das war verständlich...
Dann muss im Timerinterrupt nur noch getestet werden ob "ganzrunter" 
gesetzt wurde. Wenn ja muss die Zeit gemerkt werden und 80 
Timerinterrups danach der Fenstermotor wieder abgeschaltet werden.

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.