[Tiny13][C] Obsługa ADC ...
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
Cóż, jeśli do OCR0A wpiszemy wartość 0, to wypełnienie na wyjściu wynosi niecałe 0,5%, natomiast po wpisaniu wartości 255 będzie wynosiło pełne 100%. Receptą na to jest negacja stanów na wyjściu, czyli po prostu zmiana reakcji wyjścia przy porównaniu. Wystarczy ustawić bit COM0A0 w rejestrze TCCR0A. Wtedy wypełnienie będzie wynosiło 0% przy OCR0A równym 255, oraz około 99,5% przy OCR0A=0.
Ciekawy pomysł,dobrze ze wiem teraz o co chodzi .Ale zrobię porostu warunek kiedy wartość adc jest równa 0,ustaw na porcie 0 i wyłącz PWM.
Pikczu-Można spróbować coś niecoś zdziałać wspólnymi silami.Ja w każdym razie chętnie pomogę.
Mam teraz taki kod:
PWM nie reaguje na zmianę napięcia na adc,kiedy usunę przeliczanie ,działa.
Pikczu-Można spróbować coś niecoś zdziałać wspólnymi silami.Ja w każdym razie chętnie pomogę.
Mam teraz taki kod:
Kod: Zaznacz cały
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/math.h>
int a;
int main(void)
{
DDRB=0b00011001;
PORTB=0b00001000;
TCCR0A = 0b10000011;
TCCR0B = 0x01;
ADCSRA|=_BV(ADEN)|_BV(ADSC)|_BV(ADATE)|_BV(ADIE)|_BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2);
ADMUX|=_BV(MUX0)|_BV(ADLAR);
sei();
while(1)
{
a=ADCH;
if (a<5)
{
TCCR0A=0b00000000;
PORTB=0x00;
}
else
{
a-=39;
a*=2.9;
TCCR0A=0b10000011;
OCR0A=a;
}
}
}
//2,45-125
//0,77-39