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

Synchronizacja Bascom, mega8535, LED 7-segment, DS1307, DS1820, ULN2008

alnus 26 Lip 2006 17:13 2291 6
REKLAMA
  • #1 2853368
    alnus
    Poziom 28  
    Posty: 1198
    Pomógł: 91
    Ocena: 66
    i jak to wszystko zsynchronizować, żeby sobie nawzajem nie przeszkadzało? LEDy oczywiście 7-mio segmentowe z 4543, wspólna katoda, katody napędzaneULN2008.
  • REKLAMA
  • #2 2855639
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    Wyświetlacz musisz zrobić w przerwaniu. Częstotliwość odświeżania każdego powinna wynosić minimum 50Hz. Lepiej unikać dokładnej częstotliwości 50Hz. Może to być np. 53.5Hz. Jeśli ma np. 4 takie kostki to częstotliwość powinna wynieść 4 * 53.5Hz czyli 214Hz lub jak kto woli przerwanie powinno być wywoływane co 4,67 milisekundy. Od tego bym zaczął. Nie wiem w czym robisz ale powiedzmy, że na jakimś ATMEGA z 4MHz kwarcem.

    Wpisz sobie np. coś takiego:


    
    config timer0 = timer, prescaler=1024
    
    load timer1, 18
    on timer1 obsluga_led
    enable timer1
    enable interrupts
    
    do
    {tutej miejsce na program główny}
    loop
    
    end
    
    obsluga_led:
    {tutaj obsługa przerwania}
    return
    


    W programie głównym umieściłbym procedurę przygotowującą dane do wyświetlenia, oraz procedury odczytu z obudwu układów oraz obsługę jakichś przycisków, itp.
  • REKLAMA
  • #3 2856146
    alnus
    Poziom 28  
    Posty: 1198
    Pomógł: 91
    Ocena: 66
    tak to mniej więcej robię. tyle tylko, ze przerwanie przerywa komunikację I2C i zjada sekundy , albo powstają jakieś błędy. jak dam odczyt I2C w obsłudze przerwania - to sam wiesz wszystko zaczyna migotać. nie zacząłem jeszcze wkładać do programu procedur do 1wire, ale tam też szykuje się problem z czasem konwersji - nie można dać waitms bo wyświetlacze staną. wstępnie dałem w obsłudze przerwań zmienną która się zeruje co ok. 700ms. takie same zmienne muszę dać do obsługi przycisków - bo debounce też zatrzymuje program. mam atmega 8535 z kwarcem 8Mhz ( szczęsliwie odblokowaną po pomyłce w fusebitach :-) , do wyświetlania jest zasadniczo 7 cyfr , to znaczy 6 cyfr i do tego jako 7.ma 5 kontrolnych ledek. odczyt z I2c musi być min. raz na sekundę , do tego odczyt z DS1820 i wypisanie temperatury na LCD, cały czasmultipleks LED i obsluga klawiszy. o przeliczaniu temperatury i w zależności od niej obsłudze wyjść nie piszę bo to już drobiazg. czy to się da zrobić w Bascomie?
  • REKLAMA
  • #4 2865426
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam ponownie

    No to niźle się zapowiada bo mam zamiar najdalej w przyszłym tygodniu rozpocząc prace nad zegarem czasu rzeczywistego wykonanego na LEDach i połączyć to PCF8583 i czujnikami temperatury. Chyba nie pozostanie mi nic innego jak samemu to sprawdzić i chyba się męczyć. W każdym razie dam znać jak mi poszło. Nie wykluczone, że umieszczę to później w tym miejscu (jak wyjdzie :D)

    --
    pozdrawiam
  • #5 2868945
    alnus
    Poziom 28  
    Posty: 1198
    Pomógł: 91
    Ocena: 66
    ja mam jeszcze lcd. co prawda już działa, ale raz udało mi się już przekroczyc 4 kb kodu. niestety Bascom Demo nie sygnalizuje tego w cywilizowany sposób, tylko pokazuje błędy syntax w kodzie , gdzie wcześniej wszystko było OK. a tylko wprowadzenie zapisu i odczytu I2C , 1 wire i LCD zajęło mi na dzień dobry spory kawał pamięci.
  • #6 2868965
    filip_gd
    Poziom 12  
    Posty: 103
    Pomógł: 1
    Ocena: 2
    Zrób sobie ekspander na jakimś procku do tego wyświetlacza LED żeby komunikował się np. po rs232 i po kłopocie.
    pozdr
  • REKLAMA
  • #7 2869054
    alnus
    Poziom 28  
    Posty: 1198
    Pomógł: 91
    Ocena: 66
    myślałem o tym, ale wydawało mi się zbyt kłopotliwe, dałem większzego procka i ... narobiłem sobie dopiero kłopotów. teraz muszę to narazie tak jak jest uruchomić do porządku.

Podsumowanie tematu

✨ Dyskusja dotyczy synchronizacji wyświetlaczy LED 7-segmentowych sterowanych przez układ 4543 z katodą wspólną, napędzanych przez ULN2008, wraz z obsługą zegara czasu rzeczywistego DS1307 oraz czujnika temperatury DS1820 na mikrokontrolerze ATmega8535 z kwarcem 8 MHz, programowanym w Bascom. Kluczowym problemem jest zapewnienie prawidłowej obsługi przerwań do multipleksowania wyświetlaczy przy częstotliwości odświeżania powyżej 50 Hz (np. 53,5 Hz na pojedynczy wyświetlacz, co dla 4 wyświetlaczy daje około 214 Hz przerwań co 4,67 ms), bez zakłócania komunikacji I2C i 1-wire, które są wrażliwe na opóźnienia i blokowanie w przerwaniach. Wskazano, że odczyt I2C i 1-wire nie powinien być wykonywany w obsłudze przerwań, gdyż powoduje to błędy i migotanie wyświetlaczy. Proponowane jest stosowanie zmiennych flagowych do synchronizacji odczytów i obsługi przycisków z debounce, aby uniknąć blokowania programu. Wspomniano o problemach z pamięcią programu w Bascom, gdzie dodanie obsługi I2C, 1-wire i LCD szybko przekracza limit 4 KB w wersji demo. Zaproponowano alternatywę w postaci dedykowanego procesora do sterowania wyświetlaczem LED z komunikacją RS232, jednak autor uznał to za zbyt skomplikowane i wolałby rozwiązać problem na obecnym mikrokontrolerze.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA