Cvecko
28.09.2005, 23:19
Hallo alle zusammen!
Ich bin dabei, etwas mit dem Atmega8 zu experimentieren, die grundlegendsten Schrittte hab ich hinter mir.
Aktuell programmiere ich etwas mit einer Software-PWM (Hardware-PWM lasse ich also erst mal außen vor). Als Programmierbeispiel
fahre ich einfach ein paar LEDs in der Helligkeit hoch und runter. Die Geschwindigkeit dieses Hoch- und Runterfahrens
würde ich nun gerne über ein Poti steuern, also über den ADC. Funktion und Ansprechen des ADCs ist auch kein Problem, ABER:
ich habe Schwierigkeiten, den Wert aus der ADC weiter zu verwenden.
Das Programm "stürzt" meistens einfach ab, sobald der über den ADC ermittelte Wert zum Einsatz kommen soll. Nur ab und zu wird der ADC-Wert (nach einem Reset) richtig interpretiert.
Hier dazu mal die Dimmfunktion, in der die neue Geschwindigkeit aus der AD-Wandlung übernommen werden soll:
void hochdimmen (int ausgabe_pin)
{
while (t_aus>0)
{
while (v>0)
{
pwm_hoch(ausgabe_pin); //verschachtelte Schleife, in der die PWM-Funtion ausgeführt wird
v=v-4;
}
t_aus--;
t_ein++;
v=v_set; // <------ hierum gehts: in v_set steht das ADC-Ergebnis drin, mit dem jetzt eine neue Geschwindigkeit erreicht werden soll.
}
t_aus=t_aus_set;
t_ein=t_ein_set;
}
Wenn ich eine "Überprüfung" des Wertebereiches (z.B. grob zwischen 100 und 1000) der ADC-Wandlung mache, scheint acuh der richtige Zahlenbereich herauszukommen (LED zeigts an):
if (ad_result>100 && ad_result<1000)
outp(0x01, PORTB);
Hab schon allerhand ausprobiert, aber es klappt einfach nicht, das ADC-Ergebnis weiter zu verwenden....
Könnte es evtl. an einem speziellen Format des ADC-Ergebnisses im ADC-Ergebnisregister liegen?
Ich wäre für einen Lösungsansatz sehr dankbar, hab mir echt schon Stunden damit vertrieben....
Danke schon mal, Stefan!
Ich bin dabei, etwas mit dem Atmega8 zu experimentieren, die grundlegendsten Schrittte hab ich hinter mir.
Aktuell programmiere ich etwas mit einer Software-PWM (Hardware-PWM lasse ich also erst mal außen vor). Als Programmierbeispiel
fahre ich einfach ein paar LEDs in der Helligkeit hoch und runter. Die Geschwindigkeit dieses Hoch- und Runterfahrens
würde ich nun gerne über ein Poti steuern, also über den ADC. Funktion und Ansprechen des ADCs ist auch kein Problem, ABER:
ich habe Schwierigkeiten, den Wert aus der ADC weiter zu verwenden.
Das Programm "stürzt" meistens einfach ab, sobald der über den ADC ermittelte Wert zum Einsatz kommen soll. Nur ab und zu wird der ADC-Wert (nach einem Reset) richtig interpretiert.
Hier dazu mal die Dimmfunktion, in der die neue Geschwindigkeit aus der AD-Wandlung übernommen werden soll:
void hochdimmen (int ausgabe_pin)
{
while (t_aus>0)
{
while (v>0)
{
pwm_hoch(ausgabe_pin); //verschachtelte Schleife, in der die PWM-Funtion ausgeführt wird
v=v-4;
}
t_aus--;
t_ein++;
v=v_set; // <------ hierum gehts: in v_set steht das ADC-Ergebnis drin, mit dem jetzt eine neue Geschwindigkeit erreicht werden soll.
}
t_aus=t_aus_set;
t_ein=t_ein_set;
}
Wenn ich eine "Überprüfung" des Wertebereiches (z.B. grob zwischen 100 und 1000) der ADC-Wandlung mache, scheint acuh der richtige Zahlenbereich herauszukommen (LED zeigts an):
if (ad_result>100 && ad_result<1000)
outp(0x01, PORTB);
Hab schon allerhand ausprobiert, aber es klappt einfach nicht, das ADC-Ergebnis weiter zu verwenden....
Könnte es evtl. an einem speziellen Format des ADC-Ergebnisses im ADC-Ergebnisregister liegen?
Ich wäre für einen Lösungsansatz sehr dankbar, hab mir echt schon Stunden damit vertrieben....
Danke schon mal, Stefan!