ein einfacher pwm-Ersatz zum Experimentieren

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • ein einfacher pwm-Ersatz zum Experimentieren

      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:

      BASCOM Source Code

      1. ' Compiler: Bascom 2.0.7.5
      2. '
      3. ' Dateiname: pwm-Ersatz mit einem Poti regeln A8.avr
      4. ' Funktion: pwm-Ersatz mit an/aus, mit einem Poti kann man die an/aus Werte verändern
      5. ' Datum: Start 13.03.2020, Stand 13.03.2020
      6. ' Von: Naubaddi
      7. '
      8. ' Atmega8 (C.6 RESET)
      9. '
      10. ' +----v----+
      11. ' RESET C.6 | 1 28| C.5 ADC5/SCL
      12. ' RXD D.0 | 2 27| C.4 ADC4/SDA
      13. ' TXD D.1 | 3 26| C.3 ADC3
      14. ' INT0 D.2 | 4 25| C.2 ADC2
      15. ' INT1 D.3 | 5 24| C.1 ADC1
      16. ' XCK/T0 D.4 | 6 23| C.0 ADC0
      17. ' VCC | 7 22| GND
      18. ' GND | 8 21| AREF
      19. ' XTAL1/TOSC1 B.6 | 9 20| AVCC
      20. ' XTAL2/TOSC2 B.7 |10 19| B.5 SCK
      21. ' T1 D.5 |11 18| B.4 MISO
      22. ' AIN0 D.6 |12 17| B.3 MOSI/OC2
      23. ' AIN1 D.7 |13 16| B.2 SS/OC1B
      24. ' ICP1 B.0 |14 15| B.1 OC1A
      25. ' +---------+
      26. '
      27. ' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
      28. $regfile = "m8def.dat"
      29. $crystal = 8000000
      30. $hwstack = 56
      31. $swstack = 56
      32. $framesize = 56
      33. ' &HFF, &HE1, &HD9, &HFF ' 1MHz
      34. $PROG &HFF, &HE4, &HD9, &HFF ' 8MHz
      35. ' --- Deklarationen... -----------------------------------------------------------------------------------------
      36. config adc = single , prescaler = auto , reference = avcc
      37. config portc.0 = input ' Eingang für ein Poti
      38. config portb.0 = output ' Ausgang für die Impulse
      39. ' --- Variablen, Alias... --------------------------------------------------------------------------------------
      40. dim Potiwert as word ' Wert des Potis
      41. dim an as word ' an-Zeit für den Ausgang
      42. dim aus as word ' aus-Zeit für den Ausgang
      43. dim Zeit as word ' anheben/absenken mit einer for-Schleife
      44. dim minimal as word ' minimal-Wert für die for-Schleife
      45. Ausgang alias portb.0 ' Ausgang für Verbraucher wie LED, Motor...
      46. ' --- Vorbelegung der Variablen, Alias... ----------------------------------------------------------------------
      47. minimal = 33 ' bei Werten <33 sieht man eh fast nix mehr
      48. ' --- Programm Anfang ------------------------------------------------------------------------------------------
      49. do
      50. Potiwert = getadc(0) ' Potiwert holen
      51. if Potiwert < minimal then : Potiwert = minimal : endif ' Potiwert nicht kleiner 33
      52. waitms 333 ' eine kleine Pause vor dem Anheben
      53. for Zeit = 0 to Potiwert ' anheben
      54. an = Zeit : aus = Potiwert - Zeit ' ein-Zeit anheben, aus-Zeit absenken
      55. Ausgang = 1 : waitus an : Ausgang = 0 : waitus aus ' der pwm-Ersatz
      56. next Zeit
      57. for Zeit = 0 to Potiwert ' absenken
      58. an = Potiwert - Zeit : aus = Zeit ' ein-Zeit absenken, aus-Zeit anheben
      59. Ausgang = 1 : waitus an : Ausgang = 0 : waitus aus ' der pwm-Ersatz
      60. next Zeit
      61. loop
      62. ' --- Programm Ende --------------------------------------------------------------------------------------------
      63. end
      64. ' --------------------------------------------------------------------------------------------------------------
      Display All

      Grüßle, Naubaddi