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

[atmega8] początkującego pytań kilka

goclik 09 Wrz 2010 18:32 2472 14
REKLAMA
  • #1 8493318
    goclik
    Poziom 10  
    Witam.
    Buduję termohigrometr na atmega8 i czujniku sht11. Urządzenie ładnie mierzy mi już wilgotność i temperaturę a wyniki wyświetla na lcd 2x16.
    Dodatkowo do mojego urządzenia podpinam jakieś urządzenie zew., które uruchamiane jest (poprzez MOC3010) w momencie spadku wilgotności poniżej pewnego poziomu lub z przycisku. I właśnie z uruchamianiem z przycisku mam problem.
    Oczywiście przycisk obsługiwany będzie za pomocą przerwania zewnętrznego ale... nie wiem jak to zaprogramować.
    Przycisk niestety mam podłączony do PD0 (czyli nie do INT0 i INT1).
    Czy da się z tego jakoś obsłużyć przerwanie? Jeżeli tak to w jaki sposób? Prosiłbym o wytłumaczenie tego w sposób łopatologiczny bowiem dopiero zaczynam przygodę z avr ;)
  • REKLAMA
  • #2 8493336
    gaskoin
    Poziom 38  
    niestety nie da się obsłużyć przerwania z tego miejsca. Możesz tylko na bieżąco sprawdzać czy nie zmienił się stan przycisku lub czy nie jest on przyciśnięty i tyle. ewentualnie podłączyć go w inne miejsce
  • #3 8493382
    goclik
    Poziom 10  
    Tego się niestety obawiałem. No cóż, pozostaje mi podłączyć go w inne miejsce. Czy jest obojętne do którego przerwania (INT0 czy INT1) go podłącze?
    I drugie pytanie dotyczy optotriaka MOC3010. Czy jest jakaś polska dokumentacja? Ewentualnie wyjaśnienie w jaki sposób go obsługiwać aby puszczał mi prąd na wyjście do którego podłączam urządzenie zewnętrzne?
  • REKLAMA
  • #4 8493421
    gaskoin
    Poziom 38  
    nie ma to znaczenia do którego pinu, jeden jest niezależny od drugiego.

    Nie ma polskich dokumentacji. Jest angielska, jak z resztą do wszystkiego bo w Polsce podzespołów elektronicznych nie produkuje się.

    Cytat:
    Ewentualnie wyjaśnienie w jaki sposób go obsługiwać aby puszczał mi prąd na wyjście do którego podłączam urządzenie zewnętrzne?


    tutaj trochę zakręciłeś, że nie śmiem nawet przypuszczać o co Ci chodzi :D Jeżeli chodzi o sterowanie urządzeniami podpiętymi do 230V to w zeszłym tygodniu było tysiąc schematów o takim sterowaniu. Mógłbyś wykorzystać jeden, upraszczając go nieco poprzez wycięcie z niego elementów odpowiedzialnych za wykrycie przejścia sygnału przez zero.

    No i pamiętaj, że optotriak służy właściwie jedynie do izolacji urządzenia od 230V
  • #5 8493498
    goclik
    Poziom 10  
    Może faktycznie trochę zakręciłem ;)
    Do mojego urządzenia podpinam jakieś urządzenie zewnętrzne. Przepływem prądu steruje za pomocą optotriaka + triaka.
    Najlepiej do zobrazowania problemu dołączę schemat.
    Chodzi mi o to jak tym sterować? Prosiłbym o teorie albo lepiej jakiś przykład w C ;)
  • REKLAMA
  • #6 8493557
    gaskoin
    Poziom 38  
    tak jak zwykłą diodą
  • #7 8493693
    goclik
    Poziom 10  
    Hm... im więcej czytam tym więcej mam wątpliwości czy mi to zadziała tak jak mam to podłączone. Czy na lini wychodzącej z pinu PB1 nie powinienem mieć jeszcze jakiegoś rezystora? Czy jak włączę wewn. pull-up to nie spali mi optotriaka?
    Aha i jeszcze jedno pytanie.
    Nie wiem dlaczego ale gdy po zaprogramowaniu odłączę urządzenie od prądu i włączę ponownie to zachowuje się ono tak jakby procesor w ogóle nie był zaprogramowany. Muszę kilka razy włączać i wyłączać z zasilania aby ruszył a czasem ponownie zaprogramować.
    Czasem pomaga też zmiana zasilania. Jeżeli zasilam urządzenie z gniazdka to na procesor idzie napięcie o wysokości 5 V. Jeżeli zmienię na zasilanie z programatora (a wtedy napięcie wynosi około 4,5 V) to procesor rusza. Działa też w odwrotną stronę czyli zmiana zasilania z programatora na gniazdko. Co może być powodem tego, że procesor się tak "zawiesza"?
  • #8 8493797
    xury
    Specjalista automatyka domowa
    Na ostatnie pytania odpowiedź standardowa: potrzebna jest stabilizacja i filtracja napięcia zasilania mikrokontrolera. Tematów o tym zagadnieniu też tysiące.
    Wewnętrzny pull-up nie spali ci optotriaka. Czasem może paść raczej port, kiedy jest przeciążony.
  • #9 8494363
    gaskoin
    Poziom 38  
    postaraj się jednak jakoś cudem przetłumaczyć dokumentację. Pojedynczy pin procesora MAXYMALNIE uciągnie 40mA prądu, a przez diodę z optotriaka może przepłynąć 50A więc jakiś rezystor ograniczający prąd jest mile wskazany
  • #10 8494649
    goclik
    Poziom 10  
    Rozumiem. Rezystor 180R chyba może być? Czy dać większy?
    Co do urządzenia to pojawiły się kolejne pytania. Włączyłem optotriaka i aby zaobserwować czy faktycznie działa tak jak powinien podłączyłem żarówkę. Okazało się, że mimo iż optotriak jest wyłączony to żarówka raz na jakiś czas (mniej więcej 2/3 razy na minute) mruga. A nie powinna. Co może być tego powodem?

    Drugi problem to problem od strony programowania (prawdopodobnie). Optotriak uruchamia się tylko w momencie gdy na wyświetlaczu nic nie jest wyświetlane. Chciałbym aby w momencie działania urządzenia zew. wskazania temperatury i wilgotności były nadal wyświetlane. Tyle, że wtedy optotriak nie włącza się.
    Kod wygląda następująco:
    
    #define OPTO_ON DDRB |= (1<<DDB1); PORTB &= ~(1<<PORTB1);
    #define OPTO_OFF PORTB |= (1<<PORTB1);
    
    //------------------------------------------------------------------
    if(spr_wilg < 70)   // jezeli wilgotnosc spadnie ponizej 70%
    	{
    		OPTO_ON;	//wlaczanie optotriaka (urzadzenie zew.)
    		wyswietl_krotkie(temp, wilg); //wyswietlanie skroconej temp. i wilg.	
    	}
    	else
    	{ 
    		OPTO_OFF;	//wylaczenie optotriaka
    		wyswietl(0,0,temp,0,1,wilg); 	//wyswietlanie temp. i wilg.
    	}
    


    przy czym funkcje wyswietl_krotkie() i wyswietl() odpowiednio konwertują wskazania i je wyświetlają. Optotriak włącza się tylko w momencie gdy je zakomentuje.
  • REKLAMA
  • #11 8494853
    Konto nie istnieje
    Konto nie istnieje  
  • #12 8496507
    goclik
    Poziom 10  
    Faktycznie, nie pomyślałem o tym. Niestety lcd mam podłączony 8-bitowo. W takim razie będę musiał przepiąć optotriak do innego portu.
    A jakieś pomysły co do tego mrygania żarówki? Możliwe że to triak padł?

    Dodano po 3 [godziny] 43 [minuty]:

    Ok pozbyłem się mrugania, podłączyłem optotriak do PD5 i ładnie mi wyświetla i włącza optotriaka. Pojawił się jednak inny problem.
    Kod programu jest identyczny jak wcześniej (zmienił się tylko kod #define który obecnie włącza/wyłącza PD5 zamiast PB1).
    Chodzi o to, że optotriak jest uruchamiany tylko w przy włączeniu urządzenia i gdy wilgotność wynosi mniej niż 70%. Jeżeli wilgotność podniesie się (lub jest wyższa niż 70% w momencie włączenia urządzenia) i spadnie to optotriak nie uruchamia się.
    Czy przyczyną może być to że podłączyłem go do PD5 (czyli alternatywnego T1 - zew. wejście licznika)?
  • #13 8509544
    goclik
    Poziom 10  
    Ktoś wie co jest przyczyną?
  • #14 8509812
    MacGyver 7
    Poziom 21  
    Czy jakaś inna procedura nie grzebie nic przy rejestrze DDRB? Może przypadkowo przełącza DDB1 w stan wejścia. Albo też procedura przełączająca triak jest uruchamiana tylko na początku programu, a raczej powinna być powtarzana cyklicznie co jakiś czas.
  • #15 8510784
    goclik
    Poziom 10  
    Przeleciałem cały kod programy litera po literze i znalazłem błąd. Typowa literówka. Eh... kilka godzin na to zmarnowałem... W każdym bądź radzie dzięki MacGyver 7 bo to Ty mnie do tego natchnąłeś ;)

    Nadal jednak mam problem z tym zawieszaniem się procesora (pisałem o tym kilka postów wyżej). Co to za stabilizacja o której mówił xury? Jak mam tego szukać bo nie umiem nic znaleźć?
    Mierzyłem miernikiem napięcie zasilające. Gdy urządzenie mam podłączone do gniazdka to wynosi ono 5,04 V i jest stałe, nie spada i nie wzrasta. Czy muszę stosować tą stabilizację? Czy może problem tkwi w czymś innym?
    Dodam tylko, że w czasie takiego "zwisu" procesor nadal łączy się z komputerem i mogę go programować
REKLAMA