PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED Dimmerprogramm



king-sixXx
21.01.2006, 18:56
Hallo Leute!

Ich hab mich mal testweise an einem Dimmerprogramm versucht.

Dazu habe ich an Pin 15 (OC1A) des Mega8 nach einem 1,2K Widerstand eine LED an die Masse angeschlossen.

Mein Programm dazu sieht so aus:



$Regfile="m8def.dat"
$Crystal=4000000
$Baud =9600

DDRB.1=1

TCCR1A=&B10000001
TCCR1B=&B00000010

Do
OCR1AL=220
'OCR1AL=120
'OCR1AL=20
Loop



Leider funktioniert es nicht. Egal welchen Wert ich ich setze, die LED bleibt aus..
Findet jemand den Fehler???

Vielen Dank!

patti16
21.01.2006, 22:27
hallo

glaube du machst es einfach zu kompleziert geht auch einfacher:




Dim A As Word

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8

Config Pinb.1 = Output

do

For A = 0 To 511
Pwm1a = A
Waitms 20

Next

loop
end



oder um nur a zu bestimmen schreibste einfach

a = 255


probiers einfach mal so

gruß
patrick

king-sixXx
24.01.2006, 10:12
Hi patti16!
Danke für die schnelle Antwort. Ich bin eben erst dazu gekommen dein Programm zu testen.
Leider funktioniert es auch nicht. Kann es sein, dass sich mein mega8 verabschiedet hat?
Hab mir mal einen neuen bestellt und werde es mal mit dem neuen versuchen.

MFG!

patti16
24.01.2006, 15:51
warum meinste das sich dein mega8 verabschiedet hat tut sich da gar nichts mehr?

oder was macht er über haupt wenn er noch was tut??


gruß
patrick

king-sixXx
24.01.2006, 18:50
PWM-technisch macht er gar nichts, er gibt über die RS232-Schnittstelle nur noch undefinierbare Zeichen aus und er lässt sich nicht mehr programmieren....
Ich hab sonst keine Idee, was da schief galaufen ist.

patti16
24.01.2006, 21:19
hallo

hast du die fusebits umgestellt?

die dürftest du auf jeden fall noch raus bekommen andern falls ist der µC denke ich mal kaputt.

gruß
patrick

king-sixXx
25.01.2006, 09:05
An den Fusebits hab ich nichts umgestellt.
Der µC wird auch nicht mehr von Bascom erkannt. Ich hoffe der neue kommt heute oder morgen.

MFG!

Marco78
25.01.2006, 09:54
An den Fusebits hab ich nichts umgestellt.



$Crystal=4000000

Dann ist dein Programm für einen 4 mal schnelleren Takt berechnet als der AVR tatsächlich hat!
Wenn du nichts eingestellt hast, läuft er mit 1MHz.

Nur komisch, das Bascom ihn nicht mehr erkennt. Aber das mag ja auch andere Gründe haben.

king-sixXx
25.01.2006, 12:31
nein, nein so mein ich das nicht :-)
Ich hab die Fusebits schon auf den externen Quarz umgestellt. Entschuldigt meine ungenaue formulierung.

Mit dem Satz wollte ich nur ausdrücken, das die Fusebits nichts mit dem aktuellen Problem zu tun haben.

MFG!

Marco78
25.01.2006, 12:46
Achso, dann hab ich das nur falsch verstanden.

Vielleicht ist es doch nur ein Hardwareproblem? Der Quarz schwingt nicht richtig, oder er ist kaputt, der Dongle ist defekt, ...?

Naja, mal schauen, wie sich der neue Mega8 in der Schaltung verhält.

Papsi
27.01.2006, 06:39
Hallo,

Ich bin seit einer Woche dabei mit meinem Steckbrett und meinem ersten AVR zu testen.

Das Dimmen von LED habe ich gestern gerade probiert und funktioniert mit diesem Code bei mir.
Sollte eigentlich alles klar sein:
Mußt halt nur die config´s an deine Probierplatine anpassen

$regfile = "m16def.dat"
$crystal = 12000000

Const True = 1
Const False = 0

Dim Hi As Byte
Dim Lo As Byte
Dim Phase As Bit

Config Timer0 = Timer , Prescale = 64

On Timer0 Timer0_isr

Config Pinc.0 = Output
Config Pinc.1 = Output
Led1 Alias Portc.0
Led2 Alias Portc.1

' Config Lcd = 16 * 2
' Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
' Config Lcdbus = 4

Config Pina.0 = Input
Config Pina.1 = Input
Config Pina.2 = Input
Tasterhoch Alias Pina.0
Tasterrunter Alias Pina.1
Tasterenter Alias Pina.2

Enable Timer0
Enable Interrupts

Lo = 255
Phase = True
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1

'Initlcd
'Cls

Do
Waitms 5
'Locate 1 , 5 : Lcd Lo
If Tasterhoch = 1 Then Incr Lo
If Tasterrunter = 1 Then Decr Lo
If Lo = 0 Then Lo = 1
If Lo = 255 Then Lo = 254
Hi = 255 - Lo
Loop

End

Timer0_isr:
If Phase = True Then
Led1 = 1
Timer0 = Lo
Phase = False
Else
Led1 = 0
Timer0 = Hi
Phase = True
End If
Return

Die Sachen, die ich auskommentiert habe, kannste auch weglassen, wenn Du kein Display dran hast.
ich habe das nur für mich gemacht. (Übung macht den Meister) O:)

king-sixXx
27.01.2006, 13:30
Es funktioniert!!!!!!

Ich hab das schon so lange versucht mit dem PWM und es hat nie geklappt.... und jetzt langs nur an dem doofen Chip! Aber jetzt neuer Chip, neues Glück und es läuft!

Vielen Dank an alle!!!

patti16
27.01.2006, 17:34
bitte bitte nichts zu danken.

gruß
patrick