pomoc w opisie i dokładnym zrozumieniu programu

0

Witam,
mam prośbę o drobną wg mnie pomoc. Czy mógłby ktoś dokładniej opisać podany przeze mnie kod programu? Lub go tak opisać 'łopatologicznie' dla gościa, który z programowania jest zielony? Jest to program sterujący jasnością diody. Będę bardzo wdzięczny za pomoc. Załączam kod programu:

#include <avr/io.h>
#include <util/delay.h>

#define LED	PB3
#define WE_POT	0x01
#define POT PC1

void main(void)
{
DDRB  =  (1<<LED);	//ustawienie jako wyjscie portu do sterowania jasnoscia

PORTB =  ~((1<<LED));	//ustawienie pull up pozostalych wejsc portu B

PORTC= ~((1<<POT));	//ustawienie pull up pozostalych wejsc portu C oprocz wejscia ADC z potencjometru

PORTD = 0xFF;	//ustawienie pull up pozostalych wejsc portu D


//Inicjalizacja ADC

ADCSRA = (1<<ADEN)	//włączenie ADC
|(1<<ADPS0)	//ADPS2:0: ustawienie preskalera na 8 (125kHz)
|(1<<ADPS1);	//wyrównanie wyniku konwersji do lewej

ADMUX = (1<<REFS0)
|(1<<ADLAR)	//VCC jako napięcie referencyjne z kondensatorem na nozce AREF
| WE_POT;	//Wybor kanalu poczatkowego (PC1) ADC1


TCCR2 = (1<<WGM20)	//ustawienie timera 2 w tryb fast pwm z preskalerem /8 | fPWM = 1000000/256*8
|(1<<COM21)
|(1<<CS21)
|(1<<WGM21);


for(;;)
{
ADCSRA |= (1<<ADSC);	//ADSC: Uruchomienie pojedynczej konwersji
while(ADCSRA & (1<<ADSC)); //czeka na zakończenie konwersji
OCR2 = ADCH;	//przepisanie wyniku konwersji do rejestru timera 2 (fast PWM)
}
}

0

Wygląda na to, że programujecie w C pod avr'ami.
Czego brakuje w Twoim pytaniu to schematu, wywołujesz pwm (czyli wypelnienie sygnalu prostokątnego) do rozjaśniania diody.
Czym wieksze wypełnienie tym dioda jaśniej świeci (przepływa przez nią wiecej pradu) - Prawo ohma.
Mierzysz również napięcie max 2,56 V (V ref).
Diodę masz na porcie z sygnalem PWM:

#define LED PB3
DDRB  =  (1<LED);    //ustawienie jako wyjscie portu do sterowania jasnoscia

PORTB =  ~((1<<LED));    //ustawienie pull up pozostalych wejsc portu B

Ustawiasz port jako wyjsciowy (DDRB), potem PORTB jako 0, mierzysz napięcie:

 
ADCSRA |= (1<<ADSC);    //ADSC: Uruchomienie pojedynczej konwersji
while(ADCSRA & (1<<ADSC)); //czeka na zakończenie konwersji

A wartość z przetwornika napięcie -> wartość liczbowa (tłumaczę najbardziej łopatologicznie)
przypisujesz do zmiennej wypełniającej (PWM) OC2.

"WNIOSEK Z TEGO TAKI, ŻE PRZYPISUJESZ NAPIĘCIE WYSTEPUJĄCE NA DIODZIE DO WARTOSCI PWM 'NIBY' JĄ ROZJAŚNIAJĄC, CO W TEORII NIE MA ŻADNEGO SENSU (BEZ SCHEMATU)" - czyli jezeli dioda zwieksza swoje napięcie(ADC atmegi);PWM zwieksza je jeszcze bardziej rozjaśniając ją(diodę).

Troszkę to bez sensu, ale nie widzę schematu więc nie mogę więcej powiedzieć.

Pozdrawiam Elga

0

dzięki za odpowiedź, dużo mi rozjaśniła
dołączam jeszcze proszony przez Ciebie schemat układu, w razie nie jasności proszę pisać

1 użytkowników online, w tym zalogowanych: 0, gości: 1