mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC12F519 - Timer Probleme


Autor: Michael S. (moepat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also ich bin relativ neu im PIC-Bereich, habe mir jetzt ein kleines 
Programm geschreiben mit welchem ich auch schon wunderbar per Taster 
meine LEDs nach belieben Ein-/Ausschalten.

Jetzt wollte ich noch einen Timer einbauen damit sich die LED zB nach 
30Sek wieder ausschaltet, leider schaff ich es einfach nicht den TMR0 
meines PIC12F519 so einzurichten.

hat vlt jemand paar tipps für mich? aus dem datasheet werd ich zZ 
einfahc nicht schlau, vlt hat jemand ein kleines programm snippet in 
welchem er den tmr0 richtig konfiguriert hat?!


Thx schonmal im voraus!

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit welchem COmpiler arbeitest du, sofern C ?

Autor: Michael S. (moepat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahh sry, vergessen :(

ich mach das ganze in Assembler

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
30 Sekunden sind für einen Mikrocontroller schon eine verdammt lange 
Zeit. Wenn man davon ausgeht, dass Dein PIC mit 8 MHz getaktet wird, 
dann werden in den 30 Sekunden 60.000.000 Befehle ausgeführt. Selbst mit 
einem 1:256 Vorteiler ist der 8-Bit Timer hoffnungslos überfordert und 
wird ca. 916 Mal überlaufen.
Du müsstest also mit einer (16-Bit-)Variable diese Timerüberläufe zählen 
und die LED nach dem 916. Überlauf abschalten.

Autor: Michael S. (moepat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke schonmal für deine antwort!

wäre es denn nicht möglich zB einen Timer zu machen, welcher 0,01Sek 
läuft und diesen dann in einer schleife aufrufen? um dann zB auf 
sekunden-minuten-stunden usw hochzählen zu können?

wichtig wäre mir einfach einen Zähle rzu erhalten der "recht" genau auf 
ca 9 Stunden hochzählen kann, ob er dann am ende 9,2 Stunden oder 8,8 
Stunden gelaufen is is eher nebensächlich, hauptsache ich komme mit 
bordmittel in etwa auf eine voreingestellte Zeit.

Also meine Idee war bisher wie folgt :)

zuerst Initialisiere ich mal den TMR0:
Init_Timer:
  clrwdt    ;Clear Watchdog and prescaler
  movlw  b'11010111'  ;Tmr clk intern, Prescaler Tmr0, Prescaler=256
  option
  retlw 0

danach poll ich auf den Timer:
  movlw  0x25
  subwf  TMR0,W
  btfsc  STATUS,C
  goto  Check_Step
  clrw
  movwf  TMR0
  btfss  Led1
  goto nxt
  Led1_OFF
  goto Check_Step

nxt:
  Led1_ON
  goto Check_Step

muss dazu sagen, das meiste davon hab ich mir iwie zusammengereimt, 
leidre find eich nirgends iwelche codeschnitzel, mit welchen ich etwas 
anfangen.

Mein Problem is einfach noch das ich mir noch recht schwer mit dem asm 
code zurecht komme :) komme von der vb-seite, also ganz was anderes...

vlt hat ja noch jemand nen tipp für mich?

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.