Userinfo & Login
Zurück   AVR-PRAXiS-Forum > AVR-Mikrocontrollerfamilie > Hardware > Timer
Timer 16bit und 8bit Timer (Timermodi, PWM, Capture-Compare-Unit, Timer-Interrupt)
Antwort
 
Themen-Optionen Ansicht

  #1  
Alt 31.01.2010, 08:26
Walter Walter ist offline
Neuer Benutzer
 
Registriert seit: 15.01.2010
Beiträge: 3
Rotes Gesicht Timer und PWM

Hallo !!!
Ich bin völlig neu in der µc Welt und versuche seit einigen Tagen die ersten Programmzeilen zu erstellen.
Zum laufen lernen habe ich mir einen Mega8 mit ein paar Relais, einem DCF Empfänger und ein paar LEDs zusammengelötet.
Genutzt wird Bascom und ein AVR ISP mkII.

Feierlich konnte ich auch alles schon soweit testen und feststellen, das alle LED, Relais und auch PWM tadellos funktionieren.

Nun zum Problem....

Da dem Timer 1 die DCF Zeit zugeordnet ist, kann ich mit meinem besch...eidenen Wissen nicht mehr gleichzeitig PWM an OC1A nutzen.
Zumindest rennt mir dann meine Uhrzeit davon.....

Bevor ich aber jetzt das umlöten beginne, wollte ich doch mal hier um Hilfe bitten.

Also im idealfall, wie kann ich pwm an OC1A nutzen ohne das diese funktion die Uhrzeit beeinflusst.
Alle meine versuche mit Timer2 und disconnect von OC2 schlugen fehl.

Umlöten auf OC2 wollte ich noch nicht, da mir die Auswirkungen bei der Nutzung des ISP noch nicht ganz klar sind.
Würde es hier konflikte geben ???

hier mal die Programmzeilen welche ich bisher habe:
'******************************************************** '******** Definition des µC und des Quarzes '******************************************************** $regfile "m8def.dat" $crystal = 1000000 '******************************************************** '******** Konfiguration LCD 20*4 '******************************************************** Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 '******************************************************** '******** Configuration DCF '******************************************************** Config Dcf77 = Pinb.6 , Timer = 1 , Inverted = 0 , Check = 1 , Update = 0 , Secondticks = 1 , Timer1sec = 1 , Debug = 1 Config Date = Dmy , Separator = . '******************************************************** '******** Configuration PWM '******************************************************** Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1. '******************************************************** '******** Variablen '******************************************************** Dim Time_flag As Integer Dim I As Integer Dim Sec_old As Byte , Dcfsec_old As Byte Dim Chk_dcf As Integer '******************************************************** '******** Startupmeldung am LCD '******************************************************** Cursor = Off Gosub Hello '******************************************************** '******** Definition IO '******************************************************** Config Portb.1 = Output Config Portd.0 = Input Config Portd.1 = Input Config Portd.5 = Input Config Portb.2 = Output Config Portd.4 = Output Config Portd.6 = Output Config Portd.7 = Output Config Portb.0 = Output '******************************************************** '******** Definition Alias '******************************************************** Tast_1 Alias Portd.0 Tast_2 Alias Portd.1 Tast_3 Alias Portd.5 Rel_1 Alias Portb.2 Rel_2 Alias Portd.4 Rel_3 Alias Portd.6 Rel_4 Alias Portd.7 Rel_5 Alias Portb.0 Dimmer Alias Portb.1 '******************************************************** '******** Konfiguration Interrupts '******************************************************** Enable Interrupts '******************************************************** '******** Hauptschleife '******************************************************** Do Chk_dcf = 0 Gosub Act_time Gosub Use_rel_1 Gosub Use_dimmer Loop '******************************************************** '******** Subroutinen '******************************************************** Hello: Cls Locate 1 , 4 Lcd "Hallo, ich bin" Locate 2 , 7 Lcd "der neue" Locate 3 , 2 Lcd "Microcontroller" Wait 3 Return Act_time: For I = 1 To 78 Waitms 10 If Sec_old <> _sec Then Exit For End If If Dcfsec_old <> Dcf_sec Then Exit For End If Next Waitms 220 Sec_old = _sec Dcfsec_old = Dcf_sec Locate 4 , 1 Lcd Time$ ; "" Locate 4 , 10 Lcd Date$ If Chk_dcf = 1 Then Cls Locate 4 , 1 Lcd Time$ ; "" Locate 4 , 10 Lcd Date$ Locate 1 , 1 Lcd Time(dcf_sec) ; " " Locate 1 , 10 Lcd Date(dcf_day) ; " " Locate 2 , 1 Lcd Bin(dcf_status) ; " " Locate 2 , 10 Lcd Bin(dcf_bits) ; " " Locate 3 , 1 Lcd Bdcf_impuls ; " " Locate 3 , 10 Lcd Bdcf_pause Return End If Return Use_rel_1: If Time$ = "00:00:10" And Time_flag = 0 Then Rel_1 = 1 Time_flag = 1 End If If Time$ = "00:01:10" And Time_flag = 1 Then Rel_1 = 0 Time_flag = 0 End If Return Use_dimmer: If Time$ = "00:00:05" And Time_flag = 0 Then compare1a=1 Time_flag = 1 End If If Time$ = "00:00:15" And Time_flag = 1 Then Compare1a = 255 Time_flag = 0 End If Return
Ich hoffe Ihr könnt mir da irgendwie weiterhelfen....

Gruß
Walter

Geändert von Walter (31.01.2010 um 08:28 Uhr).
Mit Zitat antworten
  #2  
Alt 31.01.2010, 11:25
HinterBlauenAugen HinterBlauenAugen ist offline
Erfahrener Forum-Benutzer
 
Registriert seit: 28.12.2009
Beiträge: 98
Standard

Hallo Walter,
die DCF Auswertung ist leider auf den Timer1 festgelegt. Parallel dazu wirst du den Timer nicht für PWM nutzen können.
Daher wird ein Umlöten auf OC2 nicht zu vermeiden sein.
Den Mosi Pin benutze ich bei meinem Mega16 auch als Output, allerdings nur als Stromversorgung mit Dauer-High. Beim Programmieren ist das PWM Signal eh nicht vorhanden, allerdings könnten die angeschlossenen Bauelemente zuviel Strom ziehen.
Im Betrieb musst du den ISP Stecker evtl. abziehen.
Ich würde an deiner Stelle auch das Sectic Label vom Config DCF77 benutzen. Dieses wird dann einmal jede Sekunde angesprungen und du kannst dort ein Flag setzen, um die Uhrzeit auf dem Display zu aktualisieren. Dann brauchst du die Sub Act_time nicht dauernd auszuführen, deren Inhalt nur aus Warten besteht. Also so:
Do ... If Sekunden_flag=1 Then Sekunden_flag=0 Locate 4 , 1 Lcd Time$ ; "" Locate 4 , 10 Lcd Date$ If Chk_dcf = 1 Then Cls Locate 4 , 1 Lcd Time$ ; "" Locate 4 , 10 Lcd Date$ Locate 1 , 1 Lcd Time(dcf_sec) ; " " Locate 1 , 10 Lcd Date(dcf_day) ; " " Locate 2 , 1 Lcd Bin(dcf_status) ; " " Locate 2 , 10 Lcd Bin(dcf_bits) ; " " Locate 3 , 1 Lcd Bdcf_impuls ; " " Locate 3 , 10 Lcd Bdcf_pause End If End If ... Loop ... End Sectic: Sekunden_flag=1 Return
Deine Tast_1 solltest du auf PinD.0 ändern, wenn du ihn im Programm verwenden willst. Die anderen entsprechend.

HBA
Mit Zitat antworten
  #3  
Alt 31.01.2010, 15:03
Walter Walter ist offline
Neuer Benutzer
 
Registriert seit: 15.01.2010
Beiträge: 3
Standard

Danke für den Tip mit den pin.......

Das bedeutet aber ich kann keine 2 Hardware pwm in Verbindung mit einer Uhr verwenden oder verstehe ich das jetzt komplett falsch?

Bzw. wie lassen sich dann in Verbindung mit einer Uhr beide Hardware PWM nutzen
Mit Zitat antworten
  #4  
Alt 31.01.2010, 15:19
HinterBlauenAugen HinterBlauenAugen ist offline
Erfahrener Forum-Benutzer
 
Registriert seit: 28.12.2009
Beiträge: 98
Standard

Naja, du musst ja DCF nicht über den BASCOM Befehl machen.
Wenn du einen Timer laufen hast, kannst du das Signal auch selber einlesen und verarbeiten. Mache ich auch so, weil ich den Timer1 brauche.

HBA
Mit Zitat antworten
  #5  
Alt 01.02.2010, 18:28
adelinde adelinde ist offline
Fortgeschrittener Forum-Benutzer
 
Registriert seit: 21.02.2009
Beiträge: 41
Standard

Hallo HBA,
(hast du auch einen Namen, mit dem ich Dich ansprechen kann?)

das gleiche Problem hatte ich auch schon ein paar mal.
Die schnellst und einfachste Lösung (für mich) war, ein größerer Atmega.

Aber schau doch mal hier rein http://www.avr-praxis.de/forum/showthread.php?t=1012
bringt Dir zwei zusätzliche PWM. Das IC hat bei mir auf Anhieb funktioniert.

Gruß Siggi
Mit Zitat antworten
  #6  
Alt 01.02.2010, 18:44
HinterBlauenAugen HinterBlauenAugen ist offline
Erfahrener Forum-Benutzer
 
Registriert seit: 28.12.2009
Beiträge: 98
Standard

Zitat:
Beitrag anzeigen
das gleiche Problem hatte ich auch schon ein paar mal.
Die schnellst und einfachste Lösung (für mich) war, ein größerer Atmega.
Du hast recht, das geht eigentlich immer und macht hier glaube ich auch Sinn.
Wenn, dann würde ich aber auf einen Pin-kompatiblen Mega88 wechseln. Der hat 6PWMs und Walter muss gar nichts ändern.

HBA

PS. Ich könnte auch irgendeinen Namen angeben. Ansonsten bleibe ich lieber anonym. Ich hoffe, dass macht niemandem etwas aus.
Mit Zitat antworten
  #7  
Alt 02.02.2010, 08:19
Walter Walter ist offline
Neuer Benutzer
 
Registriert seit: 15.01.2010
Beiträge: 3
Standard

Vielen Dank !!!

Ja ein deutlich größerer µc ist schon bestellt.....

Allein schon wegen des kleinen 8kb Speichers des Mega 8.
Meine Kenntnisse in der Programmierung sind einfach noch in den Kinderschuhen.... da ist das mit dem Resourcen schonen noch nicht so sehr ausgeprägt.

@Siggi, das ist ein guter Tip, allerdings ist das Thema i2c noch hinten angestellt.
Muss erst mal die Funktionen der µc's etwas besser kennen lernen.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Timer und Watchdog adelinde Programmierung 4 24.12.2009 00:13
Zwei mal Timer 1 ? Neuuser Software 10 16.05.2009 19:55
Timer Berechnungsfrage andy999mueller Programmierung 27 16.06.2008 14:24
Timer Frage andy999mueller Programmierung 4 12.02.2008 22:01


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:58 Uhr.

Powered by vBulletin® Version 3.6.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
vBulletin Style by: vbdesigns.de
AVR-PRAXiS V.2007 I © Copyright 2007 by Dirk Rodenhausen