Hi, es gibt viele Möglichkeiten um etwas zu programmieren was Helligkeit, Geschwindigkeit... verändert, die eleganteste Lösung ist pwm (PulsWeitenModulation). Vor den Mikrocontrollern kannte ich so etwas als Frequenzumrichter, da wird aus Wechselstrom ein Gleichstrom-Signal für etwas größere Motoren genutzt um diese in der Drehzahl zu beeinflussen.
Zum Programm, es ist sehr einfach und übersichtlich gehalten damit Laien (so wie ich) es erkennen was da passiert, kompliziert ist für die Profis unter uns ;-).
Es wird nix Weltbewegendes gemacht, einfach nur die Einzeit und die Auszeit an einem Ausgang für einen Zyklus eingestellt, damit man etwas sehen kann muss dieser Vorgang kontinuierlich wiederholt werden. Bei einer Wiederholung kann man die Werte weiter senden oder veränderte Werte senden, bei dem Programm wird z.B. bei einer LED die Helligkeit mit der ersten for-Schleife angehoben und bei der zweiten abgesenkt. Mit einem Poti kann man die Geschwindigkeit für anheben/absenken verändern, zum Experimentieren reicht das Programm wie es im Moment ist.
Vielleicht ist hier ja Jemand der etwas Zeit hat um das Programm mit echtem pwm zu erstellen, dann hat man 2 Versionen aus der man sich die passende aussuchen kann.
Der abgebildete Atmega8 im Programm ist meine Eselsbrücke, so etwas kann ich mir nicht merken:
Alles anzeigen
Grüßle, Naubaddi
Zum Programm, es ist sehr einfach und übersichtlich gehalten damit Laien (so wie ich) es erkennen was da passiert, kompliziert ist für die Profis unter uns ;-).
Es wird nix Weltbewegendes gemacht, einfach nur die Einzeit und die Auszeit an einem Ausgang für einen Zyklus eingestellt, damit man etwas sehen kann muss dieser Vorgang kontinuierlich wiederholt werden. Bei einer Wiederholung kann man die Werte weiter senden oder veränderte Werte senden, bei dem Programm wird z.B. bei einer LED die Helligkeit mit der ersten for-Schleife angehoben und bei der zweiten abgesenkt. Mit einem Poti kann man die Geschwindigkeit für anheben/absenken verändern, zum Experimentieren reicht das Programm wie es im Moment ist.
Vielleicht ist hier ja Jemand der etwas Zeit hat um das Programm mit echtem pwm zu erstellen, dann hat man 2 Versionen aus der man sich die passende aussuchen kann.
Der abgebildete Atmega8 im Programm ist meine Eselsbrücke, so etwas kann ich mir nicht merken:
BASCOM-Quellcode
- ' Compiler: Bascom 2.0.7.5
- '
- ' Dateiname: pwm-Ersatz mit einem Poti regeln A8.avr
- ' Funktion: pwm-Ersatz mit an/aus, mit einem Poti kann man die an/aus Werte verändern
- ' Datum: Start 13.03.2020, Stand 13.03.2020
- ' Von: Naubaddi
- '
- ' Atmega8 (C.6 RESET)
- '
- ' +----v----+
- ' RESET C.6 | 1 28| C.5 ADC5/SCL
- ' RXD D.0 | 2 27| C.4 ADC4/SDA
- ' TXD D.1 | 3 26| C.3 ADC3
- ' INT0 D.2 | 4 25| C.2 ADC2
- ' INT1 D.3 | 5 24| C.1 ADC1
- ' XCK/T0 D.4 | 6 23| C.0 ADC0
- ' VCC | 7 22| GND
- ' GND | 8 21| AREF
- ' XTAL1/TOSC1 B.6 | 9 20| AVCC
- ' XTAL2/TOSC2 B.7 |10 19| B.5 SCK
- ' T1 D.5 |11 18| B.4 MISO
- ' AIN0 D.6 |12 17| B.3 MOSI/OC2
- ' AIN1 D.7 |13 16| B.2 SS/OC1B
- ' ICP1 B.0 |14 15| B.1 OC1A
- ' +---------+
- '
- ' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
- $regfile = "m8def.dat"
- $crystal = 8000000
- $hwstack = 56
- $swstack = 56
- $framesize = 56
- ' &HFF, &HE1, &HD9, &HFF ' 1MHz
- $PROG &HFF, &HE4, &HD9, &HFF ' 8MHz
- ' --- Deklarationen... -----------------------------------------------------------------------------------------
- config adc = single , prescaler = auto , reference = avcc
- config portc.0 = input ' Eingang für ein Poti
- config portb.0 = output ' Ausgang für die Impulse
- ' --- Variablen, Alias... --------------------------------------------------------------------------------------
- dim Potiwert as word ' Wert des Potis
- dim an as word ' an-Zeit für den Ausgang
- dim aus as word ' aus-Zeit für den Ausgang
- dim Zeit as word ' anheben/absenken mit einer for-Schleife
- dim minimal as word ' minimal-Wert für die for-Schleife
- Ausgang alias portb.0 ' Ausgang für Verbraucher wie LED, Motor...
- ' --- Vorbelegung der Variablen, Alias... ----------------------------------------------------------------------
- minimal = 33 ' bei Werten <33 sieht man eh fast nix mehr
- ' --- Programm Anfang ------------------------------------------------------------------------------------------
- do
- Potiwert = getadc(0) ' Potiwert holen
- if Potiwert < minimal then : Potiwert = minimal : endif ' Potiwert nicht kleiner 33
- waitms 333 ' eine kleine Pause vor dem Anheben
- for Zeit = 0 to Potiwert ' anheben
- an = Zeit : aus = Potiwert - Zeit ' ein-Zeit anheben, aus-Zeit absenken
- Ausgang = 1 : waitus an : Ausgang = 0 : waitus aus ' der pwm-Ersatz
- next Zeit
- for Zeit = 0 to Potiwert ' absenken
- an = Potiwert - Zeit : aus = Zeit ' ein-Zeit absenken, aus-Zeit anheben
- Ausgang = 1 : waitus an : Ausgang = 0 : waitus aus ' der pwm-Ersatz
- next Zeit
- loop
- ' --- Programm Ende --------------------------------------------------------------------------------------------
- end
- ' --------------------------------------------------------------------------------------------------------------
Grüßle, Naubaddi