Hallo Gemeinde, Ich bin jetzt ca. 6 Wochen in die Programmierung der µC mit Bascom eingestiegen. Mein Projekt (Steuerung eines Röhrenvorverstärkers mit Fernbedienung (RC5), Lautstärke und Ballanceregelung über Digitalpoti DS1802, Bedienung am Gerät mit 9 Tastern und LCD-Anzeige) funktioniert tadallos. Zum Schluss wollte ich noch einen Betriebsstundenzähler verwirklichen. Allerdings komme ich nicht auf den gewünschten Takt von einer Sekunde. Ich habe folgendes angewendet: Die Zählschritte des Timers erfolgen mit: Quarzfrequenz / Prescale = 4 MHz / 64 = 62500 Hz - also alle 0.016 ms. Die Dauer, die der Timer insgesamt benötigt bis die 65536 Schritte voll gezählt sind beträgt: 0.016 ms x 65536 = 1.048576 Sekunden. Für 1 Sekunde: 1/0,016 mS = 62500 --> Startwert für Timer = 65536-62500 = 3036 leider dauern meine Sekunden (Timerüberlauf) ca. 4 sekunden Ich habe auch am STK eine 4MHz Quarz eingesetzt und den entsprechenden Jumper gesetzt leider mit gleichem Ergebnis. Was mache ich falsch? Programmauszug: $regfile = "m16def.dat" $crystal = 4000000 Config Timer1 = Timer , Prescale = 64 On Timer1 Timerroutine Enable Timer1 Timer1 = 3036 Start Timer1 dim i as byte Do Loop Timerroutine: Timer1 = 3036 incr i lcd i Return End Gruß smalldevice
Macht "lcd i" eine Ausgabe auf dem Display? Wenn ja raus damit und ab in die Main damit (deine do loop). In einer Interruptroutine grundsätzlich kurz halten... LCD Ausgabe ist schnarchlanngsam...
Erstens gibt es für solche Sachen den CTC-Modus des Timers, der das unsinnige Nachladen im Interrupt Handler mit dem ganzen Overhead überflüssig und den Timer genauer macht. Zweitens hast Du vermutlich die Fusebits nicht korrekt gesetzt, so dass der ATMega16 mit dem internen Oszillator bei 1 MHz läuft (das ist der Auslieferungszustand). Wenn etwas anderes als die Default-Taktquelle verwendet werden soll, dann nützen keine Jumper etwas, dann müssen die Fuses entsprechend programmiert werden. Auch BASCOM kann Dich davor nicht bewahren, es weiß schließlich nicht, was Du alles an den µC anschließen willst...
... ... wrote: > Macht "lcd i" eine Ausgabe auf dem Display? > > Wenn ja raus damit und ab in die Main damit (deine do loop). > > In einer Interruptroutine grundsätzlich kurz halten... Naja, wenn die einmal in der Sekunde aufgerufen werden soll, dann ist es noch kein Problem. Aber grundsätzlich hast Du völlig Recht.
Hallo, Danke für die Tips. Es lag an der Einstellung des Fusebits für die Taktfrequenz. Programm ist jetzt fertig und ich werde mich nun dem Platinendesign widmen. Freue mich schon auf mein neues "Kontrollzentrum" für meinen Röhrenverstärker. Nochmal DANKE!!! Gruß smalldevice
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.