Geregelter Aufwärtswandler 12V/24V

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Das Programm geht auch ohne Platine. Aber Wir können nur sinnvolles Beitragen wenn wir genug Infos haben. Der stand des Codes und eine Beschreibung des aktuellen Problems. Nicht "ich komm nicht weiter" sondern "warum macht der ab Zeile yx Mist" oder "wie bekomme ich Ergbnis der Zeile x in die Routine der Zeilen y? " Aber dafür müssen wir die Zeilen kennen.
    • $regfile="m8def.dat"
      $crystal=8000000

      Config Lcd=16x2
      Config Lcdpin=Pin,Db4=PORTD.6,Db5=Portd.7,Db6=PORTB.0,Db7=PORTB.2,E=PORTD.4,Rs=PORTC.0
      Cursor off
      cls

      Const Fosc=8000000
      Const Fpwm=15000
      Const Prescale=1

      Config Adc=Single,Prescaler=Auto,Reference=INTERNAL
      Start Adc

      Dim Adcwert as Word
      Dim Uist as Single
      Dim Usoll as Single
      Dim Schritte as Word
      Dim Pwmwert as Word
      Dim Hilfsin as Single

      Pwmwert=200
      Pwm1a=Pwmwert

      Tccr1a=&B10000010
      Tccr1b=&B00011001

      Hilfsin=Fosc/Fpwm
      Hilfsin=Hilfsin/Prescale
      Hilfsin=Round(hilfsin)

      Schritte=Hilfsin
      Capture1=Schritte

      Config Portd.5=OUTPUT

      Do 'Beginn der Schleife
      Adcwert=Getadc(3) 'Spannung vom Poti P1 0V=Adcwert=O,5V=Adcwert=1023
      'digit=5/1023 Volt=0,00489V
      Usoll=Adcwert 'von word auf single bringen
      Usoll=Usoll*0,00489 'die am pin anliegende Spannung ausrechnen

      Locate 1,1:Lcd ``Spannung an pinc.3``
      Locate 2,1:Lcd Usoll_Anzeige;´´V´´ 'Anzeige der Spannung auf dem Display
      Waitms 100
      Loop 'Schleife, die Spannung wird neu berechnet.

      End





      Das einzige was ich noch ändern muss ist die LCD-Pinbelegung, habe die etwas verändert.

      Das ist jetzt ein Programm mit einem Poti.
    • YdnAm schrieb:

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

      Config Lcd=16x2
      Config Lcdpin=Pin,Db4=PORTD.6,Db5=Portd.7,Db6=PORTB.0,Db7=PORTB.2,E=PORTD.4,Rs=PORTC.0
      Cursor off
      cls

      Const Fosc=8000000
      Const Fpwm=15000
      Const Prescale=1

      Config Adc=Single,Prescaler=Auto,Reference=INTERNAL
      Start Adc

      Dim Adcwert as Word
      Dim Uist as Single
      Dim Usoll as Single
      Dim Schritte as Word
      Dim Pwmwert as Word
      Dim Hilfsin as Single

      Pwmwert=200
      Pwm1a=Pwmwert

      Tccr1a=&B10000010
      Tccr1b=&B00011001

      Hilfsin=Fosc/Fpwm
      Hilfsin=Hilfsin/Prescale
      Hilfsin=Round(hilfsin)

      Schritte=Hilfsin
      Capture1=Schritte

      Config Portd.5=OUTPUT

      Do 'Beginn der Schleife
      Adcwert=Getadc(3) 'Spannung vom Poti P1 0V=Adcwert=O,5V=Adcwert=1023
      'digit=5/1023 Volt=0,00489V
      Usoll=Adcwert 'von word auf single bringen
      Usoll=Usoll*0,00489 'die am pin anliegende Spannung ausrechnen

      Locate 1,1:Lcd ``Spannung an pinc.3``
      Locate 2,1:Lcd Usoll_Anzeige;´´V´´ 'Anzeige der Spannung auf dem Display
      Waitms 100
      Loop 'Schleife, die Spannung wird neu berechnet.

      End





      Das einzige was ich noch ändern muss ist die LCD-Pinbelegung, habe die etwas verändert.

      Das ist jetzt ein Programm mit einem Poti.
      Meine Antwort von Samstag wurde nicht abgesendet.... und ich habe das nicht gemerkt
    • Ok, ist eigentlich nicht meine Art, aber hier geht nichts richtig voran und in dem Tempo lernst du es nicht.
      Man muss sich damit schon eingehend beschäftigen...
      Schau dir den Quellcode mal genau an und gehe die Schritte durch.
      Ich habe die wichtigen Schritte kommentiert.

      BASCOM-Quellcode

      1. $regfile="m8def.dat"
      2. $crystal=8000000
      3. Config Lcd=16x2
      4. Config Lcdpin=Pin,Db4=PORTD.6,Db5=Portd.7,Db6=PORTB.0,Db7=PORTB.2,E=PORTD.4,Rs=PORTC.0
      5. Cursor off
      6. cls
      7. Const Fosc=8000000
      8. Const Fpwm=15000
      9. Const Prescale=1
      10. Config Adc=Single,Prescaler=Auto,Reference=INTERNAL
      11. Start Adc
      12. Dim UIST as Single
      13. Dim USOLL as Single
      14. Dim Pwmwert as Word
      15. Dim Display_Ausgabe as word ' Zähler, damit das Display nicht in jedem Schleifendurchlauf neu geschrieben wird
      16. Display_Ausgabe=0
      17. Pwmwert=200
      18. Pwm1a=Pwmwert
      19. Tccr1a=&B10000010
      20. Tccr1b=&B00011001
      21. ' SOLL Wert dient dem Vergleich mit dem gemessenen Wertes vom ADC
      22. ' um die PWM einzustellen
      23. '
      24. ' Messbereich Ua=0-33V
      25. ' Demnach sollen bei 33V über dem Teiler 5V anstehen.
      26. ' 33V/5V=6.6
      27. '
      28. ' Der Teiler muss ein Verhältnis von 1:6.6 haben
      29. '
      30. ' z.B. 10K gegen Masse und 56K gegen +24V
      31. '
      32. ' Ein Step des ADC Wandler ist:
      33. ' 33V / 1023 = 0.032258064V
      34. '
      35. ' Der ADC Wert für 24V ist demnach:
      36. ' 24V / 0.032258064V = 744
      37. Usoll=744
      38. Config Portd.5=OUTPUT
      39. Do
      40. ' Hole ADC Wert
      41. UIST=Getadc(3) '10K gegen Masse und 56K gegen +24V
      42. 'Vergleiche ADC Wert mit USOLL Wert um zu entscheiden, ob die PWM verstellt werden muss
      43. if UIST < USOLL then
      44. 'Ausgangsspannung zu gering, es muss mehr Energie in der Induktivität vorgeladen werden
      45. if Pwmwert < 255 then
      46. incr Pwmwert
      47. end if
      48. elseif UIST > USOLL then
      49. 'Ausgangsspannung zu hoch, es muss weniger Energie in der Induktivität vorgeladen werden
      50. if Pwmwert > 0 then
      51. decr Pwmwert
      52. end if
      53. else
      54. ' Spannung stimmt, es gibt nichts zu tun
      55. endif
      56. ' jetzt schreiben wir den PWM in das Register, damit sich die PWM auch ändert
      57. Pwm1a=Pwmwert
      58. decr Display_Ausgabe
      59. if Display_Ausgabe = 0 then
      60. Display_Ausgabe=200 ' 200 * ~5mS = 1 Sekunde
      61. Usoll_Anzeige=UIST * 0.032258064
      62. Locate 1,1:Lcd "Spannung an pinc.3"
      63. Locate 2,1:Lcd Usoll_Anzeige;"V" 'Anzeige der Spannung auf dem Display
      64. end if
      65. waitms 5
      66. Loop
      67. End
      Alles anzeigen
      Code first, think later - Natural programmer :D
    • six1 schrieb:

      Ok, ist eigentlich nicht meine Art, aber hier geht nichts richtig voran und in dem Tempo lernst du es nicht.
      Man muss sich damit schon eingehend beschäftigen...
      Schau dir den Quellcode mal genau an und gehe die Schritte durch.
      Ich habe die wichtigen Schritte kommentiert.

      BASCOM-Quellcode

      1. $regfile="m8def.dat"
      2. $crystal=8000000
      3. Config Lcd=16x2
      4. Config Lcdpin=Pin,Db4=PORTD.6,Db5=Portd.7,Db6=PORTB.0,Db7=PORTB.2,E=PORTD.4,Rs=PORTC.0
      5. Cursor off
      6. cls
      7. Const Fosc=8000000
      8. Const Fpwm=15000
      9. Const Prescale=1
      10. Config Adc=Single,Prescaler=Auto,Reference=INTERNAL
      11. Start Adc
      12. Dim UIST as Single
      13. Dim USOLL as Single
      14. Dim Pwmwert as Word
      15. Dim Display_Ausgabe as word ' Zähler, damit das Display nicht in jedem Schleifendurchlauf neu geschrieben wird
      16. Display_Ausgabe=0
      17. Pwmwert=200
      18. Pwm1a=Pwmwert
      19. Tccr1a=&B10000010
      20. Tccr1b=&B00011001
      21. ' SOLL Wert dient dem Vergleich mit dem gemessenen Wertes vom ADC
      22. ' um die PWM einzustellen
      23. '
      24. ' Messbereich Ua=0-33V
      25. ' Demnach sollen bei 33V über dem Teiler 5V anstehen.
      26. ' 33V/5V=6.6
      27. '
      28. ' Der Teiler muss ein Verhältnis von 1:6.6 haben
      29. '
      30. ' z.B. 10K gegen Masse und 56K gegen +24V
      31. '
      32. ' Ein Step des ADC Wandler ist:
      33. ' 33V / 1023 = 0.032258064V
      34. '
      35. ' Der ADC Wert für 24V ist demnach:
      36. ' 24V / 0.032258064V = 744
      37. Usoll=744
      38. Config Portd.5=OUTPUT
      39. Do
      40. ' Hole ADC Wert
      41. UIST=Getadc(3) '10K gegen Masse und 56K gegen +24V
      42. 'Vergleiche ADC Wert mit USOLL Wert um zu entscheiden, ob die PWM verstellt werden muss
      43. if UIST < USOLL then
      44. 'Ausgangsspannung zu gering, es muss mehr Energie in der Induktivität vorgeladen werden
      45. if Pwmwert < 255 then
      46. incr Pwmwert
      47. end if
      48. elseif UIST > USOLL then
      49. 'Ausgangsspannung zu hoch, es muss weniger Energie in der Induktivität vorgeladen werden
      50. if Pwmwert > 0 then
      51. decr Pwmwert
      52. end if
      53. else
      54. ' Spannung stimmt, es gibt nichts zu tun
      55. endif
      56. ' jetzt schreiben wir den PWM in das Register, damit sich die PWM auch ändert
      57. Pwm1a=Pwmwert
      58. decr Display_Ausgabe
      59. if Display_Ausgabe = 0 then
      60. Display_Ausgabe=200 ' 200 * ~5mS = 1 Sekunde
      61. Usoll_Anzeige=UIST * 0.032258064
      62. Locate 1,1:Lcd "Spannung an pinc.3"
      63. Locate 2,1:Lcd Usoll_Anzeige;"V" 'Anzeige der Spannung auf dem Display
      64. end if
      65. waitms 5
      66. Loop
      67. End
      Alles anzeigen
      Wieso rechnen sie mit einem Ua-Wert von 33V?
    • Ulrich schrieb:

      @YdnAm
      Da auch 100kHz Schaltfrequenz im Forderungskatalog gewünscht ist, sollte bei der gewählten Bit-Einstellung von TCCR1A und TCCRB in Post#147 der entsprechende ICR-Wert berechnet und eingestellt werden. Dazu ist es erforderlich, lieber YdnM, a_20_e8d7189d dass du auch einen Blick ins ATmega-328 Datenblatt wirfst.
      wieso das denn wenn ich fragen darf? ich habe ja einen atmega8
    • YdnAm schrieb:

      Das heisst statt 8000000 soll ich einen crystal von 16000000 benutzen?
      genau. Der compiler kann nicht erkennen, war für ein Quarz verwendet wird, das muss man ihm sagen, eben mit $crystal=16000000. Jetzt kann, auf Grund dieser Angabe, der compiler auch waits oder die serielle Übertragung so einrichten, dass die gewünschten Angaben im Programm auch passen. Wenn der Kontroller mit 16 MHz läuft und du hast 8MHz eingetragen, dann würde ein wait 1 statt 1 Sekunde nur 0,5 Sekunden dauern. Timerberechnungen werden aber nicht mit einem Ändern von $crystal angepasst. Das muss man selbst machen.


      Beim Programm von @six1 sehe ich keine Gefahr, dass mit der falschen Angabe was schief läuft. Es schaut aber blöd aus, wenn da ein falscher Wert drin steht. Auch die Konstanten, die am Programmanfang gemacht werden, sind so teilweise falsch und werden eigentlich gar nicht gebraucht. Hau' die aus dem listing raus.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      YdnAm schrieb:

      Das heisst statt 8000000 soll ich einen crystal von 16000000 benutzen?
      genau. Der compiler kann nicht erkennen, war für ein Quarz verwendet wird, das muss man ihm sagen, eben mit $crystal=16000000. Jetzt kann, auf Grund dieser Angabe, der compiler auch waits oder die serielle Übertragung so einrichten, dass die gewünschten Angaben im Programm auch passen. Wenn der Kontroller mit 16 MHz läuft und du hast 8MHz eingetragen, dann würde ein wait 1 statt 1 Sekunde nur 0,5 Sekunden dauern. Timerberechnungen werden aber nicht mit einem Ändern von $crystal angepasst. Das muss man selbst machen.

      Beim Programm von @six1 sehe ich keine Gefahr, dass mit der falschen Angabe was schief läuft. Es schaut aber blöd aus, wenn da ein falscher Wert drin steht. Auch die Konstanten, die am Programmanfang gemacht werden, sind so teilweise falsch und werden eigentlich gar nicht gebraucht. Hau' die aus dem listing raus.
      ok, danke für die erklärung, habe dann jetzt was dazugelernt ^^
    • YdnAm schrieb:

      Dann muss ich ja auch bei Fosc=8000000 in Fosc=16000000 ändern oder nicht?
      Damit das mit der Realität zusammen passt, ja. Aber wird das irgendwo auch verwendet?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Auch die Konstanten, die am Programmanfang gemacht werden, sind so teilweise falsch und werden eigentlich gar nicht gebraucht. Hau' die aus dem listing raus.
      Das hatte ich schon im Post #47 erwähnt. passiert ist bis Dato aber dahingehend
      noch nichts.
      Lesen, kognitiv erfassen, machen, wäre die Devise.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.