PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : portd.5 toggeln mit 6 herz



sechsrad
06.02.2008, 13:07
hallo, ich möchte ein signal mit 6herz toggeln für eine bestimmten zeit . der port ist oc1a (portd.5).
irgendwie funktioniert das nicht so. die diode blinkt nicht.

dies ist mein ansatz mit bascom :


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000
$baud = 19200
Config Timer1 = Counter , Compare A = Clear , Prescale = 1024

Compare1a = 651 ' n = 8000000/1024/6/2
'

Config Portd.5 = Output
Start Timer1

Do

Config Timer1 = Counter , Compare A = Toggle
Wait 2
Config Timer1 = Counter , Compare A = Clear
Wait 2

Loop

End

StevieL
06.02.2008, 18:04
Hallo sechsrad,

ich würde das so machen:

Timer1 als Timer konfigurieren, Startwert setzen, Timer starten.

Timerinterruptroutine definieren, hier den Startwert neu setzen, Port toggeln und eine Variable hochzählen.

In der Hauptschleife prüfen, ob die Variable bestimmten Wert schon erreicht hat. Falls ja, Timer1 stoppen.

StevieL
06.02.2008, 18:22
Zum Beispiel so:



$regfile = "m32def.dat"
$crystal = 8000000

'Timer konfigurieren
Config Timer1 = Timer, Prescale = 64

Config Portd.5 = Output
Led Alias Portd.5

dim Zaehler als byte

'Timerinterruptroutine definieren
On Timer1 Timer_irq

Vorgabe für 12 Herz (doppelte Blinkfrequenz)
Const Timervorgabe = 55119

'Timer starten
Enable Timer1
Enable Interrupts

'Programmhauptschleife
Do
if zaehler > 200 then
disable Timer1
led = 0 'zur Sicherheit
end if
Loop


'Interruptroutine
Timer_irq:
Timer1 = Timervorgabe
Toggle Led
incr Zaehler
Return



Beispiel ist allerdings ungeprüft. Die Berechnung der Timervorgabe habe ich mit rnAVR (hier im Downloadbereich) gemacht.

sechsrad
06.02.2008, 19:24
passt alles nicht, es soll später bis auf 36000herz hochgehen für eine ir-diode.