Mir war grad langweilig, vielleicht kanns ja jemand brauchen...
Code
'Programm zum steuern von LEDs über PWM per Spannung 0-5 Volt
'Zusätzlich Anzeige der Werte über ein 16x2 LCD Display
'kernspin, 13.Juni 2008
$regfile = "m8def.dat" 'ATmega8
$crystal = 4000000 '4 MHz Quarz
$hwstack = 32
$swstack = 10
$framesize = 40
Config Portd.0 = Output
Config Portd.1 = Output
'Auf einem LCD 16x2 werden der Wert von 0-1023 und die Spannung 0-5V angez.
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.1 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portd.0 , Rs = Portb.0
'Eingelesen wird der Spannungswert an Portc.0 (ADC0) 0-5 Volt, zB. von Poti
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Wert As Word
Dim Volt As Single
'An Portb.1 (OC1A) kann man direkt bzw. über Treiber LEDs mit dem PWM-Wert
'steuern, welcher als Spannung 0-5 V an Portc.0 anliegt
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
Do
Cursor Off
Wert = Getadc(0)
Compare1a = Wert / 4
Cls
Upperline
Lcd "ADC Wert: " ; Wert
'max.1024 durch 204.6 = ziemlich genau die Spannung 5V
Volt = Wert / 204.6
Lowerline
Lcd "Spannung: " ; Volt
'mit der Warteschleife kann man variieren, bei keiner schnellen Änderung
'der Spannung an Portc.0 ist ein höherer Wert besser (wegen cls)
Waitms 200
Loop
End
Alles anzeigen
Natürlich kann man sich die LCD Anzeige sparen und das "waitms 200" weglassen,
eventuell noch die LCD-bedingten Zeilen löschen und schnelleren Quarz verwenden, falls man
Spannungswerte so schnell wie möglich als PWM-Ausgabe haben möchte.
Und da mir jetzt noch immer langweilig war:
Hier mal der Quelltext, um nur 0-5 Volt am Eingang in eine PWM am Ausgang zu erzeugen:
Code
'Mittels 0-5 Volt am Eingang wird eine PWM erzeugt, mit der sich eine
'LED direkt oder über Treiber in der Helligkeit regeln lässt.
'kernspin, 13.Juni 2008
$regfile = "m8def.dat" 'ATmega8
$crystal = 4000000 '4 MHz Quarz
$hwstack = 32
$swstack = 10
$framesize = 40
'Eingelesen wird der Spannungswert an Portc.0 (ADC0) 0-5 Volt, zB. von Poti
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Wert As Word
'An Portb.1 (OC1A) kann man direkt bzw. über Treiber LEDs mit dem PWM-Wert
'steuern, welcher als Spannung 0-5 V an Portc.0 anliegt
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
Do
Cursor Off
Wert = Getadc(0)
Compare1a = Wert / 4
Loop
End
Alles anzeigen
mfG kernspin