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

Pomiar prądu w latarce z programem pisanym pod atmege 8 w języku C.

ferre111 13 Sie 2016 23:13 1335 8
REKLAMA
  • #1 15867115
    ferre111
    Poziom 9  
    Witam!
    Mam problem z programem pisanym pod atmege8 w języku C. Założenia są proste - układ steruje diodą LED mocy poprzez wyjście PWM'u podłączonego pod tranzystor mosfet. Na początku wypełnienie zmieniałem dodając bądź odejmując założoną liczbę od rejestru OCR1A. Jednak z racji wytracania dużej ilości energii na rezystorze postanowiłem, że zamiast rezystora ograniczającego zamontuję rezystor 0R1 podłączając jego jedną nóżkę do źródła tranzystora, a drugą do masy układu. Następnie sygnał z tranzystora wzmacniam przez OPA 12 razy i "wygładzam" przez kondensator 220uF po czym jest on kierowany na wejście przetwornika ADC. Tutaj kod programu odpowiedzialny za sterowanie wypełnieniem:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Atmega w ogóle nie reaguje na wciskanie przycisków. Bardzo bym prosił o jakąkolwiek wskazówkę.
    Pozdrawiam!
  • REKLAMA
  • #2 15867136
    elektronikq
    Poziom 25  
    A gdzie są w kodzie definicje klawiszy? Gdzie są ustawione PORTY jako wejścia?
  • REKLAMA
  • #3 15867144
    excray
    Poziom 41  
    Załącz cały kod i dorzuć jeszcze schemat. Nie bój się , że ktoś Ci go ukradnie - robiąc zmienne typu float już się przed tym zabezpieczyłeś.
  • REKLAMA
  • Pomocny post
    #4 15867175
    JacekCz
    Poziom 42  
    excray napisał:
    Załącz cały kod i dorzuć jeszcze schemat. Nie bój się , że ktoś Ci go ukradnie - robiąc zmienne typu float już się przed tym zabezpieczyłeś.


    ja ukradnę to.
    Jak >20lat robię w C, nie przyszło by mi do głowy. Genialny przykład wszystkich niebezpieczeństw z makr (@excray myślę że wiesz jak to zadziała):

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 15867185
    ferre111
    Poziom 9  
    Tak wiem, że zmienne float to nie najlepszy pomysł ale stwierdziłem, że skoro mam zapas pamięci to nic się nie stanie jeśli sobie na nie pozwolę :) Chyba, że mam obawiać się o stos? Mimo wszystko jest zajęta prawie połowa pamięci flash, a do tego dochodzi jeszcze to, że są również zmienne lokalne tego typu.
    A nie zamieściłem całego bo jak pisałem wcześniej program działał dopóki nie zacząłem eksperymentować z tym rezystorem więc stwierdziłem, że reszta jedynie mogłaby zaciemnić całą sprawę. Schemat dodam później.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #6 15867200
    JacekCz
    Poziom 42  
    przecinek

    .
    .
    .
    .
    .
    .
  • #7 15867222
    Konto nie istnieje
    Konto nie istnieje  
  • #8 15867240
    ferre111
    Poziom 9  
    Tak - brak reakcji był spowodowany tym nieszczęsnym przecinkiem :D
    Bardzo dziękuje za to nakierowanie - nie wiem ile jeszcze sam bym nad tym siedział.
    Jednak program nadal nie działa tak jak powinien. Kiedy "trzymam" przycisk wszystko działa dobrze - prąd wzrasta lub maleje liniowo. Jednak kiedy puszczam przycisk prąd wzrasta do ~0,8A, a następnie spada do ~0,3A i tak w kółko przy czym cykl zamyka się w około 1s. Kiedy ponownie wciskam przycisk prąd zatrzymuje się na poziomie w którym nastąpiło wciśnięcie i w zależności od wciśniętego przycisku po chwili spada/wzrasta.
  • REKLAMA
  • Pomocny post
    #9 15867547
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA