logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przetwornik AC Atmega 8, diody cały czas świecą

-nobile- 15 Lut 2010 18:00 2496 6
REKLAMA
  • #1 7698648
    -nobile-
    Poziom 16  
    mam problem z uruchomieniem przetwornika AC w atmedze, po polaczeniu ukladu zgodnie z tym schematem

    http://www.voytek.tkdami.net/programy/adc/ADC_przyk1/adc_led_atm8.png

    wszystkie ledy na ktorych ma byc wyswietlany wynik caly czas sie swieca mimo ze w programie jest ustawiony stan wysoki w konf. portow (diody sa prawidlowo polaczone).

    do przetwornika PC0 jest podlaczone 4.5V z zasilania przez rezystor 7.5KOhm

    Prosze o pomoc, co jest nie tak. (atmega sprawna, prawidlowo polaczona)

    kod programu
    
    #include <avr/io.h>
    
    #define PORT_AD PORTC	//port C z wejsciami analogowymi
    #define DDR_AD DDRC
    #define PORT_LED PORTB	//port B z ledami
    #define DDR_LED DDRB
    
    unsigned int pomiarx;	//zmienna do przechowywania pomiaru osi X
    //unsigned int pomiary;	//zmienna do przechowywania pomiaru osi Y
    
    void Inicjalizacja(void)
    {
    	DDR_AD=0x00;	//usatw port jako wejscie
    	PORT_AD=0x00;	//wejscia stan niski
    	DDR_LED=0xFF;	//usatw port jako wyjscia
    	PORT_LED=0xFF;	//wyjscia stan wysoki
    	
    	
    //wybranie wewnetrznego zrodla napiecia odniesienia, tabela 74 dokumentacji AT8 (uref)
    	ADMUX|=_BV(REFS0);
    	ADMUX|=_BV(REFS1);
    //wybranie sposobu zapisu wyniku z wyrowaniem do lewej (8 starszych bitow wyniku w rejestrze ADCH)
    	ADMUX|=_BV(ADLAR);
    //zezwolenie na konwersje (Ustawienie go zezwala na pracę przetwornika, a wyzerowanie wyłącza go)
    	ADCSRA|=_BV(ADEN);
    //wybranie czestotliwosci dla taktowania przetwornika [usatwienie 011 dzielnik 8 czyli 125kHz] (patrz tabela 76 dok. AT8)
    	ADCSRA|=_BV(ADPS0);
    	ADCSRA|=_BV(ADPS1);
    
    }
    
    int main(void)
    {
    	Inicjalizacja();
    	
    	while(1)
    	{
    		ADCSRA|=_BV(ADSC);					//rozpoczecie przetwarzania
    		while(bit_is_set(ADCSRA,ADSC)){};	//oczekiwnaie na zakonczenie przetwarzania
    		pomiarx=ADCH;						//zapisanie starszych 8 bitow wyniku pomiaru do zmiennej "pomiarx"
    	
    		PORT_LED=~pomiarx;					//wyswietlenie wyniku pomiaru("~" dopelnienei do 2 (negacja bitow))
    	}
    
    }
    


    PS. sorka za komentarze ale ucze sie dopiero programowac
  • REKLAMA
  • #2 7698876
    paw789
    Poziom 18  
    Zmienną pomiarx zadeklaruj jako unsigned char, pozatym program wydaje się byc napisany poprawnie.
    Co to oznacza: "do przetwornika PC0 jest podlaczone 4.5V z zasilania przez rezystor 7.5KOhm" skąd te 4,5V z zasilania ?
    Skąd wiesz że Atmega sprawna i prawidłowo podłączona ? Pokaż schemat.
  • REKLAMA
  • #3 7698914
    -nobile-
    Poziom 16  
    zasilanie jest brane z USB przez programator.
    Schematu jako takiego nie ma (polaczone na plytce stykowej)
    Uklad jest poprawnie podlaczony bo przed chwla dzialal mi program do zliczania impulsow i poprawnie wyswietlal wynik na diodach, wgralem ten i od ta dupa..

    teraz nawet program w stylu:

    #include <avr/io.h>



    int main(void)
    {
    DDRC=0xFF;
    PORTC=0xFF;


    }

    nie wygasza ledow.
    nie wiem co sie stalo
    AT padla czy co?
  • REKLAMA
  • #4 7698932
    paw789
    Poziom 18  
    To w końcu gdzie masz podpięte diody, na PORTB czy PORTC ?
  • #5 7698944
    -nobile-
    Poziom 16  
    tu z pospiechu zrobilem blad...
    diody sa podpiete pod B
    ale mimo wszytsko to:

    DDRB=0xFF;
    PORTB=0xFF;

    ich nie wygasza
  • REKLAMA
  • #6 7698960
    paw789
    Poziom 18  
    Jak masz podpięte diody ? Spróbuj z PORTB=0xAA;
  • #7 7698998
    -nobile-
    Poziom 16  
    Z PORTB=0xAA dalej to samo

    Diody sa podpiete w nastepujacy sposób:
    krotsza nozka (-) KATODA do uC, a dłuższa (+) ANODA do (+) zasilania

    Dodano po 1 [godziny] 36 [minuty]:

    Podłączylem teraz AT16 i dziala poprawnie, tylko nadal jest ciagle swiecenie diod (delikatnie migocza)

    Dodano po 17 [minuty]:

    Zrobielm wyzwalany przyciskiem pomiar i pokazuje wyniki ale nie wiem skad on je bierze..
    skoro do PC0 nie mam nic podpietego (zadnej wartosci napiecia) wyniki oscyluja w granicach 135 (po przeliczneiu z binarnego) ale sa czasami mocne odchyly.
    CO JEST NIE TAK??!!
REKLAMA