Wo genau hakt es denn? Bitte etwas näher beschreiben.
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.
-
ich schicke sofort mein bascom-programm
-
$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.
-
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
- $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 UIST as Single
- Dim USOLL as Single
- Dim Pwmwert as Word
- Dim Display_Ausgabe as word ' Zähler, damit das Display nicht in jedem Schleifendurchlauf neu geschrieben wird
- Display_Ausgabe=0
- Pwmwert=200
- Pwm1a=Pwmwert
- Tccr1a=&B10000010
- Tccr1b=&B00011001
- ' SOLL Wert dient dem Vergleich mit dem gemessenen Wertes vom ADC
- ' um die PWM einzustellen
- '
- ' Messbereich Ua=0-33V
- ' Demnach sollen bei 33V über dem Teiler 5V anstehen.
- ' 33V/5V=6.6
- '
- ' Der Teiler muss ein Verhältnis von 1:6.6 haben
- '
- ' z.B. 10K gegen Masse und 56K gegen +24V
- '
- ' Ein Step des ADC Wandler ist:
- ' 33V / 1023 = 0.032258064V
- '
- ' Der ADC Wert für 24V ist demnach:
- ' 24V / 0.032258064V = 744
- Usoll=744
- Config Portd.5=OUTPUT
- Do
- ' Hole ADC Wert
- UIST=Getadc(3) '10K gegen Masse und 56K gegen +24V
- 'Vergleiche ADC Wert mit USOLL Wert um zu entscheiden, ob die PWM verstellt werden muss
- if UIST < USOLL then
- 'Ausgangsspannung zu gering, es muss mehr Energie in der Induktivität vorgeladen werden
- if Pwmwert < 255 then
- incr Pwmwert
- end if
- elseif UIST > USOLL then
- 'Ausgangsspannung zu hoch, es muss weniger Energie in der Induktivität vorgeladen werden
- if Pwmwert > 0 then
- decr Pwmwert
- end if
- else
- ' Spannung stimmt, es gibt nichts zu tun
- endif
- ' jetzt schreiben wir den PWM in das Register, damit sich die PWM auch ändert
- Pwm1a=Pwmwert
- decr Display_Ausgabe
- if Display_Ausgabe = 0 then
- Display_Ausgabe=200 ' 200 * ~5mS = 1 Sekunde
- Usoll_Anzeige=UIST * 0.032258064
- Locate 1,1:Lcd "Spannung an pinc.3"
- Locate 2,1:Lcd Usoll_Anzeige;"V" 'Anzeige der Spannung auf dem Display
- end if
- waitms 5
- Loop
- End
Code first, think later - Natural programmer -
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
- $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 UIST as Single
- Dim USOLL as Single
- Dim Pwmwert as Word
- Dim Display_Ausgabe as word ' Zähler, damit das Display nicht in jedem Schleifendurchlauf neu geschrieben wird
- Display_Ausgabe=0
- Pwmwert=200
- Pwm1a=Pwmwert
- Tccr1a=&B10000010
- Tccr1b=&B00011001
- ' SOLL Wert dient dem Vergleich mit dem gemessenen Wertes vom ADC
- ' um die PWM einzustellen
- '
- ' Messbereich Ua=0-33V
- ' Demnach sollen bei 33V über dem Teiler 5V anstehen.
- ' 33V/5V=6.6
- '
- ' Der Teiler muss ein Verhältnis von 1:6.6 haben
- '
- ' z.B. 10K gegen Masse und 56K gegen +24V
- '
- ' Ein Step des ADC Wandler ist:
- ' 33V / 1023 = 0.032258064V
- '
- ' Der ADC Wert für 24V ist demnach:
- ' 24V / 0.032258064V = 744
- Usoll=744
- Config Portd.5=OUTPUT
- Do
- ' Hole ADC Wert
- UIST=Getadc(3) '10K gegen Masse und 56K gegen +24V
- 'Vergleiche ADC Wert mit USOLL Wert um zu entscheiden, ob die PWM verstellt werden muss
- if UIST < USOLL then
- 'Ausgangsspannung zu gering, es muss mehr Energie in der Induktivität vorgeladen werden
- if Pwmwert < 255 then
- incr Pwmwert
- end if
- elseif UIST > USOLL then
- 'Ausgangsspannung zu hoch, es muss weniger Energie in der Induktivität vorgeladen werden
- if Pwmwert > 0 then
- decr Pwmwert
- end if
- else
- ' Spannung stimmt, es gibt nichts zu tun
- endif
- ' jetzt schreiben wir den PWM in das Register, damit sich die PWM auch ändert
- Pwm1a=Pwmwert
- decr Display_Ausgabe
- if Display_Ausgabe = 0 then
- Display_Ausgabe=200 ' 200 * ~5mS = 1 Sekunde
- Usoll_Anzeige=UIST * 0.032258064
- Locate 1,1:Lcd "Spannung an pinc.3"
- Locate 2,1:Lcd Usoll_Anzeige;"V" 'Anzeige der Spannung auf dem Display
- end if
- waitms 5
- Loop
- End
-
33V war als Messgrenze vorgegeben.
so steht es im Forderungskatalog:
Spannungsmessbereich für U = 0-33VCode first, think later - Natural programmer -
oh ups, ja wo du es jetzt sagst, ich habe nicht soweit gerade gedacht, sorry
-
@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, dass du auch einen Blick ins ATmega-328 Datenblatt wirfst. -
Darf ich noch an den Schaltplan erinnern, da ist ein 16MHz Quarz eingemalt. $crystal=16000000 wäre dann angebracht.Raum für Notizen
-----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------- -
-
six1 schrieb:
Reference=INTERNAL
-
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, dass du auch einen Blick ins ATmega-328 Datenblatt wirfst.
-
tschoeatsch schrieb:
Darf ich noch an den Schaltplan erinnern, da ist ein 16MHz Quarz eingemalt. $crystal=16000000 wäre dann angebracht.
-
YdnAm schrieb:
Das heisst statt 8000000 soll ich einen crystal von 16000000 benutzen?
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?
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.
-
Dann muss ich ja auch bei Fosc=8000000 in Fosc=16000000 ändern oder nicht?
-
YdnAm schrieb:
Dann muss ich ja auch bei Fosc=8000000 in Fosc=16000000 ändern oder nicht?
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.
noch nichts.
Lesen, kognitiv erfassen, machen, wäre die Devise.
DetlefLeichtsinn ist kein Mut, Vorsicht keine Feigheit.