12-05-2013, 03:33 PM
Jeśli przyjmiemy że zmienna Napiecie jest odczytem z INP1 a Trzymaj to ustawiona przez nas napięcie które powinno być utrzymywane to w kodzie C możnaby to tak zapisać i działałoby bez zarzutu. i jest określone jako uint8_t. OCR1A określa wartość wypełnienia
ten kod można oczywiście rozbudować jeszcze o przedziały. Że jeżeli napięcie jedno od drugiego jest dużo większe to szybszy skok itp.
Tak to zrobiłem na AVR Atmega8 i działa ładnie.
Zrobiłem też dzielnik częstotliwości żeby zmniejszyć z 2553Hz na dowolną inną częstotliwość PWM - po testach na stykówce robię teraz podejście do solarów i próba w terenie.
Kod:
if (Napiecie > Trzymaj) {
if( 255 == i ) OCR1A=100;
else {
i++;
OCR1A=i;
if( 255 == i ) i--;
}
}
if (Napiecie < Trzymaj) {
if( 0 == i ) OCR1A=0;
else {
i--;
OCR1A=i;
}
}
if (Napiecie == Trzymaj) {
OCR1A=OCR1A; //nie rób nic
}
ten kod można oczywiście rozbudować jeszcze o przedziały. Że jeżeli napięcie jedno od drugiego jest dużo większe to szybszy skok itp.
Tak to zrobiłem na AVR Atmega8 i działa ładnie.
Zrobiłem też dzielnik częstotliwości żeby zmniejszyć z 2553Hz na dowolną inną częstotliwość PWM - po testach na stykówce robię teraz podejście do solarów i próba w terenie.
<t></t>