Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej

pawel_konin 25 Lis 2013 23:13 2394 6
  • #1 25 Lis 2013 23:13
    pawel_konin
    Poziom 20  

    Witam
    Mam następujący problem:
    W swoim prototypie narazie na płytce stykowej wykorzystuje Timer 0+LCD HD44780+ADC+przetworniczka icl 7660 do kontrastu+tl431. Mam pewne zastrzeżenia przy współpracy tych wszystkich rzeczy na raz. Dla ADC wyłączam Vref(2.56V) z procesora podaje zmniejszone napięcie do 1.1V na nóżkę Vref. Gdy jednocześnie używam lcd+adc+tl431 i wyjścia cyfrowego dioda Led widzę spadek napięcia o 0.7V na Vref i 0.01V na zasilaniu przez programator. A gdy podłączyłem +5V i GND z PC spadek wynosi 0.4V(zasilanie) i 0.5V na Vref. Dlaczego tak?? był tu podobny temat lecz bez rozwiązania. Jest to bardzo kłopotliwe gdyż Vref ustawiam potencjometrem z wyjścia TL431 w momencie spadku napięcia zmienia mi się Vref o w/w wartości.
    Ponadto na adc są skoki rzędu 10 mV max. Podłączałem do adc LM35 to raz mierzy raz nie impedancja LM35 12kΩ(wyjście do masy). A gdy podłączam potencjometr mierzy nawet pojedyncze mV.
    Teraz parę rzeczy o podłączeniu pinów układ jak w zalecanym schemacie dla adc.
    Z obostrzeniem że, nie miałem dławika i na sztukę wstawiłem jakiś z płyty głównej bliżej nie zidentyfikowany. Ale jak go wyjmę to nie widać znaczącej różnicy. Wszystkie inne nie używane porty maja ustawione jako wyjście z jedynką na wyjściu.
    Zasilanie z USB lub PC +5V plus w lini zasilania 2 elektrolity 10uF oraz 5 kondensatorów ceramicznych 100nF i wspomniany dławik na VCC. AVCC i VCC mam nieszczęśliwie jako to samo napięcia. Zmieniałem Vref na wew. lecz spadek wynosi 0,07 Miał już ktoś z was taką przypadłość w AVR ?? Jak potrzeba to zamieszczę schemat i kod. Sprawdzone na 2 egzemplarzach i efekt ten sam dziś po podłączeniu zasilania z PC brakło mi pomysłów. Gdyż myślałem że, port USB się nie wyrabia przy poborze 55mA całego systemu. Gdzie szukać przyczyny czy może płytka stykowa tak ładnie łapie szumy/nie łączy?? to jeszcze da się płytką stykowa wytłumaczyć ale spadek 0.7V na diodzie led świecącej z rezystorem wysterowanym stanem niskim jest co najmniej dziwne. Mam po prostu obawy czy jak będę miał to na PCB też będą takie problemy chciałbym likwidować takie coś na stykówce a nie na właściwym PCB

    0 6
  • #3 25 Lis 2013 23:30
    pawel_konin
    Poziom 20  

    dondu napisał:
    Witaj.
    Ponieważ zasugerowałeś pokazanie schematu i programu, to do tego opisu bardzo by się przydał.
    Kod: c
    Zaloguj się, aby zobaczyć kod
    ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej
    ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej
    Jako napięcie contrastu mam icl7660 w standardowej aplikacji (nie wrysowane na schemacie bo myślałem ze mam pozytyw)
    Tak samo LCD korzysta z 4 bitów danych ale na przyszłość w razie czego są podłączone wszystkie na wtyczkę.
    Oraz są 2 elektrolity 10uF lecz nie tak jak tu na schemacie tylko pomiędzy zasilanie i gnd już nie chciało mi się tego poprawiać by pokazać schemat.

    0
  • #4 26 Lis 2013 02:23
    Marek_Skalski
    Moderator Projektowanie

    Pokaż prawdziwy schemat, ponieważ ten nie ma prawa działać.
    Masz tutaj zwarcie zasilania z masą (od nogi 17, pod C2, obok R9 jest mostek do masy).
    Skąd bierzesz zasilanie do VR1? Rozumiem, że potencjometr ma służyć do regulacji, ale ten układ trzeba zasilić, a na tym schemacie układ jest zasilany wejściem do regulacji (R)?
    I pokaż jak podłączyłeś ICLa... jeżeli tak jak TLa, to nie dziwię się, że masz problemy.
    I uwaga praktyczna do schematu... nie ciągnij tak chaotycznie linii masy. Albo trzymaj ją na jednym poziomie (jedna linia), albo używaj symbolu masy, który znakomicie poprawia czytelność i przejrzystość schematu. I nie pisz, że nie chciało Ci się poprawiać schematu. Schemat to mapa - błędna mapa, to błędna droga.
    A generowania przerwania, aby tylko ustawić flagę sprawdzaną w pętli głównej, to jakaś patologia programowania... Przecież możesz w tym przerwaniu zrobić niemal wszystko z pętli głównej, w której powinna zostać tylko obsługa wyświetlania.

    0
  • #5 26 Lis 2013 13:44
    pawel_konin
    Poziom 20  

    Marek_Skalski napisał:
    Pokaż prawdziwy schemat, ponieważ ten nie ma prawa działać.
    Masz tutaj zwarcie zasilania z masą (od nogi 17, pod C2, obok R9 jest mostek do masy).
    Skąd bierzesz zasilanie do VR1? Rozumiem, że potencjometr ma służyć do regulacji, ale ten układ trzeba zasilić, a na tym schemacie układ jest zasilany wejściem do regulacji (R)?
    I pokaż jak podłączyłeś ICLa... jeżeli tak jak TLa, to nie dziwię się, że masz problemy.
    I uwaga praktyczna do schematu... nie ciągnij tak chaotycznie linii masy. Albo trzymaj ją na jednym poziomie (jedna linia), albo używaj symbolu masy, który znakomicie poprawia czytelność i przejrzystość schematu. I nie pisz, że nie chciało Ci się poprawiać schematu. Schemat to mapa - błędna mapa, to błędna droga.
    A generowania przerwania, aby tylko ustawić flagę sprawdzaną w pętli głównej, to jakaś patologia programowania... Przecież możesz w tym przerwaniu zrobić niemal wszystko z pętli głównej, w której powinna zostać tylko obsługa wyświetlania.

    ICL 7660 mam dokładnie jak na obrazku.
    ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej
    Fakt źle podłączyłem TL431 źle interpretując ten rysunek.
    ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej
    Poprawiłem już to. Lecz i tak notuje spadki na Vref zasilanie z programatora 0,13 V a z zasilacza komputerowego 0,05V.
    ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej
    Jak przenoszę obsługę przerwania(bez obsługi wyświetlania wyniku) do przerwania i w pętli while zostawiam tylko funkcje wyświetlenia na lcd dostaje do każdej funkcji użytej w sprintf warning a w konsekwencji error.
    warning Warning 4 implicit declaration of function 'godziny' [-Wimplicit-function-declaration]
    a error Error 7 undefined reference to `dziesiatki'
    Już dawno chciałem to rozdzielić ze względu na różne opóźnienia występujące w obsłudze lcd które wpływają na dlugosc przerwania.
    Co jeszcze można by zrobić?? gdzieś jeszcze jest błąd??

    0
  • #6 26 Lis 2013 17:59
    Marek_Skalski
    Moderator Projektowanie

    1. TL431 nadal błędnie podłączony. Zobacz w ds jak należy go podłączyć, a nie patrz na kolorowy obrazek bez komentarza mówiącego, że jest to układ do pomiaru natężenia prądu.
    2. Zwarcie resetu do zasilania.
    3. Zadeklaruj zmienne prawidłowo to nie będzie błędów.
    4. A co to jest: uint16_t dziesiatki() w pętli while(1)??? Funkcja osadzona w pętli programu głównego? Albo instrukcje w pętli (bez funkcji, która tutaj jest zupełnie zbędna), albo wywołanie funkcji zdefiniowanej w innym miejscu.
    5. Jaki jest cel stosowania takiej sekwencji: flaga=false; if(flaga==false)? Przecież to zupełnie zbędne! Jeżeli już bardzo chciałeś zastosować flagę, to mógłbym zrozumieć sprawdzenie czy flaga jest ustawiona, wykonanie sekcji i skasowanie flagi, aby nie wykonywać kodu do czasu kolejnego przerwania.
    Ogólnie, to dane na wyświetlacz możesz przesyłać co 4 przerwania. Nie będziesz widział różnicy, a mniej szumu wygenerujesz (ważne dla ADC) i procek może spać podczas konwersji.

    0
  • #7 27 Lis 2013 12:45
    pawel_konin
    Poziom 20  

    Marek_Skalski napisał:
    1. TL431 nadal błędnie podłączony. Zobacz w ds jak należy go podłączyć, a nie patrz na kolorowy obrazek bez komentarza mówiącego, że jest to układ do pomiaru natężenia prądu.
    2. Zwarcie resetu do zasilania.
    3. Zadeklaruj zmienne prawidłowo to nie będzie błędów.
    4. A co to jest: uint16_t dziesiatki() w pętli while(1)??? Funkcja osadzona w pętli programu głównego? Albo instrukcje w pętli (bez funkcji, która tutaj jest zupełnie zbędna), albo wywołanie funkcji zdefiniowanej w innym miejscu.
    5. Jaki jest cel stosowania takiej sekwencji: flaga=false; if(flaga==false)? Przecież to zupełnie zbędne! Jeżeli już bardzo chciałeś zastosować flagę, to mógłbym zrozumieć sprawdzenie czy flaga jest ustawiona, wykonanie sekcji i skasowanie flagi, aby nie wykonywać kodu do czasu kolejnego przerwania.
    Ogólnie, to dane na wyświetlacz możesz przesyłać co 4 przerwania. Nie będziesz widział różnicy, a mniej szumu wygenerujesz (ważne dla ADC) i procek może spać podczas konwersji.


    Add 1
    ATMEGA 16 - Spadek napięcia na diodzie LED czerwonej
    Add 2 reset podciągnięty do VCC zaraz ide do pracy że, wstawię dopiero wieczorem obrazek jak potrzeba.
    Add 3 tzn. jak mam je zadeklarować statyczne nie? globalne już są może jakiś przykład jak można prosić.
    Add 4 funkcja osadzona w pętli while wywoływana do wyświetlania wyniku. Wykonywana gdy wykonywane jest przerwanie.
    Gdy wstawię zwykłe wywołanie to owszem zmienne się widzą ale dla funkcji z przecinkiem brak wyniku jedynie jakiś "duch liczby" na wyświetlaczu bez wartości bez wartości po kropce. Już nie mówiąc o tym że, odliczanie jest nieprawidłowe wartości na pewno nie są odliczane co np. 1 sekundę.
    Add 5 Sekwencji już nie ma wkradła się przypadkiem jak wklejałem kod.
    Można jakiś przykład jak to zrobić?? Np. w przerwaniu
    Kod: c
    Zaloguj się, aby zobaczyć kod

    A w pętli while
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Pisałem z głowy że, to nie jest jakiś tam przykład tylko tak pisane na szybko.
    Po takim podłączeniu TL431 zasilanie z programatora i tak zmienia się napięcie co prawda o 0,03V.

    0