Witam. $regfile = "m8def.dat" $crystal = 12000000 Config Portb = Output Config Portb = 255 Config Portd = Output Config Portd = 255 Config Sda = Portc.4 Config Scl = Portc.5 I2cinit Dim Wysw_pomoc As Word Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte Dim Wysw1k As Byte , Wysw10k As Byte , Wysw100k As Byte Dim Mux As Byte Dim Sekundy As Byte Dim Minuty As Byte Dim Godziny As Byte Declare Sub Odczytaj_czas Declare Sub Zapisz_czas Config Timer0 = Timer , Prescale = 64 Enable Interrupts '-------------------------------------------------------------- Do Gosub Odczytaj_czas Loop End '-------------------------------------------------------------- ' 'Procedura cyklicznego pobierania informacji z RTC ' '-------------------------------------------------------------- Sub Odczytaj_czas I2cstart I2cwbyte 162 I2cwbyte 2 I2cstart I2cwbyte 163 I2crbyte Sekundy , Ack I2crbyte Minuty , Ack I2crbyte Godziny , Nack I2cstop Sekundy = Makedec(sekundy) Minuty = Makedec(minuty) Godziny = Makedec(godziny) End Sub '--------------------------------------------------------------- '--------------------------------------------------------------- 'Procedury zapisu danych do układu PCF '--------------------------------------------------------------- Sub Zapisz_czas Sekundy = Makebcd(sekundy) Minuty = Makebcd(minuty) Godziny = Makebcd(godziny) I2cstart I2cwbyte 162 I2cwbyte 0 I2cwbyte 8 I2cstop I2cstart I2cwbyte 162 I2cwbyte 2 I2cwbyte Sekundy I2cwbyte Minuty I2cwbyte Godziny I2cstop End Sub '----------------------------------------------------------------- '----------------------------------------------------------------- Wysw1 = Sekundy Mod 10 Wysw10 = Sekundy / 10 Wysw100 = Minuty Mod 10 Wysw1k = Minuty / 10 Wysw10k = Godziny Mod 10 Wysw100k = Godziny / 10 '------------------------------------------------------------------ Wysw1 = Lookup(wysw1 , Tabela) Wysw10 = Lookup(wysw10 , Tabela) Wysw100 = Lookup(wysw100 , Tabela) Wysw1k = Lookup(wysw1k , Tabela) Wysw10k = Lookup(wysw10k , Tabela) Wysw100k = Lookup(wysw100k , Tabela) Incr Mux If Mux = 6 Then Mux = 0 Select Case Mux Case 0: Set Portb.0 Portd = Wysw100k Reset Portb.5 Case 1: Set Portb.5 Portd = Wysw10k Reset Portb.4 Case 2: Set Portb.4 Portd = Wysw1k Reset Portb.3 Case 3: Set Portb.3 Portd = Wysw100 Reset Portb.2 Case 4: Set Portb.2 Portd = Wysw10 Reset Portb.1 Case 5: Set Portb.1 Portd = Wysw1 Reset Portb.0 End Select Return '------------------------------------------------------------------------------ Tabela: Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255 'znak: 0 1 2 3 4 5 6 7 8 9 pusty Dziękuję za pomoc i proszę o nie pisanie typu " ---> Google --> szukaj "
|
|||
głowa do góry
Nie wymiękaj tylko zrób sobie przerwę.
Te zapisy są równoznaczne
Więc z jednego zrezygnuj - oczywiście to nie stanowi problemu.
Na początek powiedz czy adresy I2C są dobre?
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
są dobre
adresy są dobre.
nowy kod, ale działa tak samo.
Pytanie, czy dobrze przeliczam sekundy, minuty i godziny ?
Zakładam, że PCF8583 ( poprzednio była pomyłka )ma jakąś godzinę zapisaną
jako początkową.
a nie możesz sobie wyświetlić
a nie możesz sobie wyświetlić tego w terminalu?Jeżeli masz przejściówkę RS to wyswietlaj sobie to w terminalu.Będziesz wiedział gdzie leży problem.Czysty PCF powinien zacząć odliczać od zera.Odczyt magistrali masz w pętli głównej bez żadnego opóźnienia,może to jest problem.Ja przeliczanie wartości robię w przerwaniu od wyświetlania.Do testów na początek wyświetl sobie jakaś stalą,będziesz wiedział ,czy prawidłowo to działa,później przejdź do odczytu PCF. Ja tak odczytuje:
nadal brak
nadal brak odpowiedzi, czy dobrze przeliczam sekundy, minuty i godziny w celu
wyświetlenia ich na sześciu wyświetlaczach 7-segmentowych.
a czy wyświetliłeś sobie
a czy wyświetliłeś sobie cokolwiek tak jak Ci pisałem? A=2,b=3 itp.Zostaw na razie ten PCF i naucz sie wyświetlać na LED.Później ,tylko dopiszesz obsługę zegarka.
dzięki Kaktus
faktycznie zdublowałem polecenia. poprawiłem to.
Po włączeniu zegar pokazuje mi 66:66:00 . Sekundy liczą poprawnie od 00 do 59.
Po tym z jedności minut robi się 9 po kolejnych 60 sekundach jakby mała litera "r" ale w lustrzanym odbiciu.
Zrobiłem nowy moduł PCF , dałem 10kOhm pullupy ( poprzednio 4,3 k )nowy PCF
ale nadal to samo. Kondki filtrujące tez 100uF i 100 nF.
Dodawanie i2cinit nic nie zmienia, i2cdelay = 10 tez nic nie zmienia.
Pin 3 PCF-a mam do VCC czyli adres 162 i 163.
Już totalnie wymiękam .
Listing wyżej to ostatni - duble "Config Portd = Output" i
"Config Portd = 255" zlikwidowałem.
Co jest nie tak ?
jeżeli sekundy idą poprawnie
jeżeli sekundy idą poprawnie to chyba pcf jest ok.Moze coś z przeliczaniem,po włączeniu bez baterii powinieneś mieć same zera.Moj kod odczytu działa na 100% możesz sobie wyciąć dzień i miesiąc.w pętli głównej daj 100ms opóźnienia .Nie powinno to zaszkodzić.Nie mam sześciu wyświetlaczy wiec nie sprawdze twojego kodu.Jak chcesz to wysle ci na 4 ale termometr.zobaczysz jak ja to mam
działa
działa ! Miałem uszkodzony wyświetlacz 7 i 8 maja zwarcia wewnątrz .
Użyłem od 1 do 6 zamiast jak do tej pory 3 do 8 .
Teraz trzeba dopisać odbiór DCF77 żeby automatycznie zrobił wpis do PCF-a.
właśnie przetestowałem twoj
właśnie przetestowałem twoj kod i miałem Ci wysłać:) u mnie tez działa:) Na przyszłość kup sobie przejściówkę rs232 na usb kosztuje kilka złotych, a pomaga wykluczyć takie błędy.Na bieżąco śledzisz sobie co sie dzieje w programie .Gdzie kupowales DCF? Mam ochote tez sie nim pobawic
dcf
Wyjąłem z zegara kupionego w lidlu.
dcf
wyjąłem z zegara kupionego w lidlu.
ale uważaj, bo mam też wyjętyz zegara wskazówkowego i ten odbiornik jest niezbyt dobry, trzeba zasilać 3V i na wyjściu dać jakiś inwerter poziomów
żeby działał dobrze z Atmelem.
gratulacje
Nie ma jak samodzielnie rozwiązać problem, experience rośnie (-;
Czyli wygląda na to że uszkodziłeś wyświetlacz, wspominałeś że dziłało przez chwilę prawidłowo, wyciągnij wnioski.
Nie ma za co ;-)
gdy grzebałem przy moim zegarku - 4xLED 7segmentów bicolor, zastosowałem CA3161E, bardzo fajna kostka.
Gdzieś go pokazałem - o tu ;-)
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
wnioski
Tak sobie teraz myślę, bo jestem w pracy.
Czy nie łatwiej zrobić zegar na Atmega8 i tylko ustawiac go co kilkanaście godzin
za pomocą odbiornika DCF ?
Chodzi o to, że gdy zaniknie sygnał DCF to zegar będzie chodził a w nocy gdy poprawi się propagacja fal radiowych
to się skoryguje.
Co o tym myslicie ? Macie jakieś pomysły, a może ktoś to już robił ?
Ustawianie to możesz sobie
Ustawianie to możesz sobie zrobić raz na tydzień.Nawet w kiepskich warunkach różnica w czasie będzie parę sekund.Oczywiście po zresetowaniu powinieneś wymusić odbiór z DCF. Ostatnio znalazłem jakaś stronkę gdzie bit po bicie bylo wyjaśnione wszystko co dotyczy odbioru i nadawania.Ale nie pamiętam jak sie nazywała.Druga sprawa jeżeli będziesz miał podłączony DCF to po co Ci zewnętrzny RTC.Wystarczy programowy zegarek.
.
Chodzi o to, że gdy zaniknie sygnał DCF to zegar będzie chodził a w nocy gdy poprawi się propagacja fal radiowych
to się skoryguje.
Może Ty
Kolejny problem początkującego.
Chcę zbudować zegar na led 7-seg. tylko godziny i minuty.
Zbudowany na PCF8583, ale ustawiany automatycznie przez DCF77.
Synchronizowany np. raz na dobę o 23:00 lub gdy odbiornik złapie prawidłową ramkę.
Nikt tego nie robił, albo nie chce pomóc. Może Ty się pochylisz nad moim problemem , bo daremno szukam pomocy na różnych portalach, a przykłady w helpie są na ten przeklęty LCD.
Może Ty
Piszę tu do Kaktus-a.
no hej
Wiesławie, skoro masz obsługę do układu czerpiącego czas atomowy z powietrza to nie rozumiem dlaczego nie działa Ci to. Wyświetlacz jakiego użyłeś nie ma związku z odbieraniem danych, jest to jedynie wyjście do komunikacji z podglądaczem - użytkownikiem.
Zaprowadziłeś inny wątek w którym wkleiłeś część kodu - tak CZĘŚĆ. I to akurat zauważył matrix oraz sygnalizował ten fakt Tobie. Nie możesz się spodziewać że ktoś rozwiąże cały problem za Ciebie. Każdy zajmuje się swoimi projektami na które musi wyłuskać ukraść czas rodzinie by go mieć ociupinkę dla siebie. Tak że ponaglanie nic dobrego tu nie wniesie, najwyżej zniechęcisz forumowiczów do swojej osoby.
Wklej kod w temacie o dcf tym razem cały z obsługą tego wynalazku, dla ułatwienia znalezienia problemu, zrób sobie taki BARDZO PROSTY debugger, podłączając ?C do portu RS komputera, przez stosowną przejściówkę, odpalając program terminala. W stosownych miejscach kodu przesyłaj zmienne do RS-a. Wtedy będziesz wiedział co się dzieje czym się ?C zajmuje. Może teraz wydaje Ci się to skomplikowane, bo być może nie miałeś z tym styczności ale wierz mi nie taki diabeł straszny .... ;-)
Jeżeli chcesz być dobry w te klocki staraj się w miarę możliwości samodzielnie doszukiwać się dyzfunkcji, zdobywaj wiedzę przeglądając czeluścia internetu. Gdy będziesz umiał wyszukiwać problemy nie będziesz zdany na łaskę niełaskę forumowiczów, którzy nie muszą mieć dla Ciebie i Twoich problemów czasu .... każdy ma ich wiele i jest zdany na siebie. Gdy będziesz umiał wyszukiwać błędy, i nieprawidłowości nauczysz się też je rozwiązywać.
Tak że uszy do góry ;-D
I takim optymistycznym akcentem Tobie i całej forumowej braci spokoju ducha, stalowych nerwów, samych udanych projektów, które będą działały za pierwszym odpaleniem - tak jak sobie to konstruktor zażyczył, coraz tańszych i lepiej dostępnych podzespołów, takie drobne życzenia składa kaktus z okazji tegorocznych Świąt Bożego Narodzenia.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Co mam napisać ?
Odczyt PCF8583 mam zrobiony i działa.
Ale nie wiem jak wkleić obsługę DCF77. Dla tego nie kombinuję
licząc, że ktoś podpowie.
Po co PCF i DCF ?
Jak sygnał DCF zaniknie, o co u mnie nie trudno
to zegar będzie pracował z PCF, a w nocy gdy
propagacja fal radiowych się poprawi i gdy zakłócenia
przemysłowe osłabną odbiornik złapie pełną i prawidłową
ramkę danych z DCF i skoryguje czas PCF .
Po to chcę PCF i DCF.
Obsługę PCF mam i działa - nie mam obsługi przycisków
bo tę robotę zrobi odbiornik DCF.
Tu jest obsługa sekund, po to abym widział , że coś się dzieje.
Docelowo ma być tyko godzina i minuty.
Powtórzę, nie wiem jak dodać obsługę DCF.
Spokojnych Świąt Bożego Narodzenia, oraz dużo cierpliwości dla żółtodziobów jak Ja.
synchronizacja czasu atomowego
1. Czyli generalnie nie masz pomysłu jak do tego dodać synchronizację z eteru za pośrednictwem dcf77 lub podobnego tak?
2. A samą obsługę tego ustrojstwa masz poprawnie zaimplementowaną?
Jeśli dobrze rozumiem i odpowiedź na oba pytania brzmi tak, więc mam propozycję:
czas z (umówmy się dla uproszczenia czas z radia będę nazywał czasem atomowym) atomowy można próbować odczytać powiedzmy raz na dobę o określonej porze (o określonej porze ustawiasz sobie flagę zezwolenia obsługi czasu atomowego, a w programie głównym testujesz tą flagę i w razie potrzeby przechodzisz do obsługi czasu atomowego). Jeżeli owa procedura zakończy się powodzeniem synchronizujesz zmienne od czasu i lub korygujesz zegarek sprzętowy, zapisując doń nowe wartości i zerując setne itp lub też nie zerując jak tam chcesz.
Tak mi się to widzi. Piszesz, że będzie twój sprytny wynalazek sprzętem bezobsługowym. Więc taką procedurę odczytu czasu atomowego można by też uruchomić po załączeniu zasilania, i przeprowadzać do czasu zakończenia jej powodzeniem.
Co do jakości sygnału o której piszesz, też mam uwagę niemniej nie wiem na ile jest prawdziwa bo nie budowałem jeszcze takiego odbiornika. Otóż swego czasu przewracałem zasoby internetu za wiadomościami o takim radiowym odbiorniku czasu atomowego. Z tego co pamiętam to ktoś opisywał fakt, że jakość sygnału jest bardzo zależna od sposobu usytuowania anteny względem nadajnika. Uwaga ta wydaje mi się bardzo prawdopodobna, i mająca odzwierciedlanie w rzeczywistości. Po prosu chodzi o to czy antena jest powiedzmy ustawiona wzdłuż rozchodzącego się sygnału radiowego czy w poprzek. Jeżeli bredzę, niech mnie ktoś kopnie w cztery litery i poprawi ;-)
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
dobrze rozumujesz Kaktus
Wszystko się zgadza. Próbowałem zapożyczyć kawałki kodu obsługi DCF z helpa
jak i ze stron www, ale niestety wszystko co znalazłem to jest na LCD.
Ni jak nie potrafię tego przełożyć na 7-seg.
No i gdzie ( w jakim miejscu kodu) wkleić obsługę radia.
P.S.
wcześniej walczyłem z termometrem, ale dzięki Mirka opracowaniu ( czytaj gotowiec) grzebałem w kodzie przerabiając go do swoich potrzeb.
Dzięki Mirkowi opanowałem już multiplex 7-seg oraz obsługę DS18B20 i przeliczanie danych w celu wyświetlania na 7-seg.
Tu listing z jakiejś niemieckiej strony, ale nie działa.
Jedyne co to mruga dioda od DCFstatus
Ot, po prostu taki sposób nauki przemawia do mnie i powoduje, że rozumiem
to co robię.
Komuś może się wydawać, że czekam na gotowca - nie, tak nie jest.
Gotowce są na elektrodzie, ale tylko schemat i gotowy wsad.
To nie powoduje, że się uczę i poznaję - to tylko bezmyślne kopiowanie,
a nie o to mi chodzi.
Listingi Mirka z komentarzami sprawiają, że wiem co robię.
no tak wiesz co robisz ...
Moim zdaniem zabierasz się za pracę z niewłąściwej strony, ale nie o tym mowa ... i nie o to tu chodzi.
Aby robić obce wstawki musisz znać składnię jeżyka i doskonale podzespół, z którym masz doczynienia, inaczej będzie to bezowocne zgadywanie. Tyle reprymendy.
Sam niejednokrotnie przekonałem się, że noty katalogowe warto czytać i zaglądać, co tam producent napisał, bo zaoszczędzi to mnóstwo czasu na dochodzenie samodzielnie do tego co jest w nocie zawarte.... postępowanie takie jest słuszne i nawet jeśli wydaje Ci się, że nic z tego nie rozumiesz to nawet przymuszaj się do tego aby choć próbować czytać. Jeżeli nie radzisz sobie z obcym językiem ... pomocny niech Ci będzie komputer i translator google ... Za którymś tam razem złapiesz dryg i będziesz miał satysfakcję z tego, że coś uda się zrobić zupełnie samodzielnie ... Koniec mojego "słowa wstępnego" ... Nie bierz tego co powiedziałem/napisałem do siebie bo się nie znamy dobrze, a są to tylko takie moje ogólne spostrzeżenia, które wcale nie muszą być trafione .... ;-)
Teraz tak, pewno układ modelowy masz na płytce testowej lub stykowej - nie jako gotowy moduł. Więc mam propozycję poszczególne etapy programu (obsługi peryferiów) testuj niezależnie od końcowego wyniku (całego programu jaki chcesz stworzyć).
Piszesz:
Więc powiem to co wcześniej, nie zaprzątaj sobie głowy tym, że masz lepszy wyświetlacz, a jakiś obcy kod jest na LCD.
Z odczytu czasu atomowego zrób sobie podprogram, który będziesz wywoływać w dogodnym dla siebie momencie ...
Skoro wynik tej konwersacji (mikrokontrolera i peryferii) wyląduje w zmiennych Twojego kodu, to przecież dla Ciebie nie będzie problemem wynik pokazać na tym lepszym wyświetlaczu.... bo jak napisałeś znasz zasadę jego obsługi i potrafisz to zrobić ... :-D
Dlatego też wcześniej napisałem, że wyświetlacz nie stanowi problemu, i jest nieistotne czy będzie to LCD, czy 7-seg LED, czy też terminal eReSa w Twoim komputerze. A właśnie czy zastanawiałeś się nad tym rozwiązaniem - połączenie układu z terminalem RS w komputerze?
Potraktuj moduł radiowy jak by to był ten zegar sprzętowy który też umiesz obsłużyć.
Piszesz:
Więc musisz z tego obcego kodu wyłuskać informację kiedy ta dioda ma mrugać, i co dokładnie sygnalizuje. Oraz to co jest najbardziej istotne, co się dzieje jeżeli nie uda się odczytać z powietrza aktualnego czasu daty itp .... Myślę, że jeżeli to będziesz wiedział rozkminisz problem w trzy sekundy. Ale trzeba wykluczyć możliwość słabego sygnału radiowego ... w tym pomoże to co napisałem w tym akapicie na wstępie.
W razie większych problemów z brakiem sygnału będziesz chyba musiał przeprowadzić się z układem modelowym koło okna, lecz jeśli masz nowoczesne okna - wielowarstwowe z gazem w środku, będą dodatkową przeszkodą dla sygnału radiowego (przynajmniej niektórych częstotliwości), więc zostaje spacer na balkon - podwórze. Oile nie mieszkasz w blokowisku. Warto by się też zorientować z którego kierunku w Twojej lokalizacji pochodzi sygnał radiowy czasu atomowego.
Tak, że w chwili obecnej dopóki nie opowiesz szczegółowo jak działa ten moduł radia do czasu atomowego, i nie przedstawisz kodu ze szczegółowymi opisami, które sam zrobisz, obaj nie będziemy więcej wiedzieli czemu Ci nie działa i z czym masz problem.
Więc bierz się do "roboty" i czekam na wyniki Twojej pracy, biorąc się za swoje projekty, które porozpoczynałem miesiące i lata temu ... ;-p
p.s.
Wyszedł mi niezły essej
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Zaczyna gadać :)
Zaczyna gadać :)Ale jeszcze trochę trzeba dopracować.
:-)
To chyba ten sam KAWAŁEK kodu, który wkleiłeś w innym miejscu forum, nic nie chcesz wytłumaczyć i opisów nie ma ...
I ten obcy język ...
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
tylko kosmetyczne zmiany
tylko kosmetyczne zmiany, co tu opisywać ?
Walka trwa, coś z odbiornikami nie tak, ale chyba to sprawa programowa.
Trzy odbiorniki ( różne) zachowują się tak samo.
język
Niestety, nie znam tego narzecza. Posiłkowałem się wiki-słownikiem aby
zgłębić co dana linia robi.
ciekawość to ...
Jakieś postępy?
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
na
na razie temat zawieszony.
Muszę opanować PCF8583.
Odczyt juz mam , ale nie wiem jak dodać obsługę przycisków do ustawiania czasu.
Może ktoś pomoże ?
Chyba, że nikt tego nie robił :(
no tak ...
To jest twój program, ale:
1. wywołanie podprogramu poza pętlą główną (po zakończeniu programu) - czy ma sens?
2. naucz się aby w obsłudze przerwania robić ja najmniej - obsługa przewrwania ma się zakończyć jaknajszybciej - zanim zostanie wywołane na nowo - a przecież ?C ma jeszcze co robić ... tak że proponuję ustawiaj sobie flagę w obsłudze przerwania a w programie głównym od flagi uzależniaj wykonanie części kodu ...
Tyle co na szybko popatrzałem.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
nowy prg
zrobiłem nowy program, ale nie działają przyciski.
Nie wiem dla czego. Oto kod.
Odczyt PCF'a i zapis do zmiennych G,M,S.
Guziki zwiekszaja lub zmnieszają tę wartośc po czym zostaje ona zapisana do PCF'a.
To teoretycznie ale w praktyce "Guziki" w ogóle nie działaja.
Nie wiem dla czego.
Może ktoś mi podpowie.
Aaa, guziki są podciągniete oporami 4,7 kOhm do plus 5 voltów.
Po pierwsze w procedurze
Po pierwsze w procedurze Guziki cały czas skaczesz do zapisu niepotrzebnie. Uzaleznij skok do zapisu od tego czy wartość jakakolwiek sie zmieniła i wymaga zapisu.
Jeśli stan któregoś z portów różny od 1 wtedy sprawdzasz który, zmieniasz wartość zmiennej i skaczesz do zapisu. Jeśli nic nie naciśnieto to Return bez zapisu. Mniej "IF-ów". Tok myślenia powinien być taki:
Teraz TYLKO gdy jakikolwiek przycisk naciśniesz wykona się zapis.
Druga sprawa to: Na początku programu konfigurujesz porty, ale dobrym zwyczajem, nawet jeśli sa podciągane rezystorami jest ich wewnętrzne "ustawienie". Więc po "Config port" powinno tez znaleźć się Set port.. albo Port = .. co ustawia go ze stanu nieustalonego ..
Trzecia sprawa:
Filtrowanie przycisków "wait"-em jest prymitywne. Jeśli to taki prosty programik to pod przyciski dodaj jakieś kondensatorki no i te "wait" w tym IF-ie dajesz tylko jedno. Tak bym się jednak nie uczył bo w programach późniejszych zobaczysz że np. na czas czekania przestajesz multipleksować wyświetlacze. Poczytaj o obsłudze przycisków tu na stronie w artykułach. Przykład kodu jedynie ma pokazać że zapis dopiero po naciśnięciu guzika.
pull up
gość pisze
Jest to załączenie wewnętrznego rezystora podciągającego, i nie jest to "dobry zwyczaj" ale jest to tylko i wyłącznie uwarunkowane konstrukcją i funkcjonalnością danego projektu - takie moje zdanie.
Jak już o tym wspominamy to warto dopisać że np dla rodzinki Mega i Tinny
Reset Pull-up Resistor - 30 do 60k? (lub 80k? małe tinny)
I/O Pin Pull-up Resistor - 20 do 50k?
nota katalogowa - Electrical Characteristics -DC Characteristics
Jeżeli przeszkadza ci tak duża tolerancja, to możesz przylutować własny rezystor podciągający.
Jeszcze jedna informacja AVR Tinny i Mega posiadają rezystor podłączany do Vcc, a XMega dodatkowo do GND (pull-down). Tak że w tym wypadku można sobie wybrać podciąganie do zasilania lub masy i sterować stanem przeciwnym.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
no cóż
Twój post niczego nie wniósł do mojego problemu. Problemu , z którym boryka sie początkujący.
Oooo !
Dzięki serdeczne za pomoc, o to chodziło.
Problemem byl zapis portc.0 ... zmieniłem na pinc.0 .... i zadziałało
ale z takim efektem jak piszesz - multiplexowanie.
Czyli, dzięki za pomoc --> Pomogłeś mi .
pull up
Jestem zwolennikiem fizycznych rezystorów podciągających .
Za konstruktywną podpowiedzią kolegi "gość" napisałem jak polecał.
zaczęło gadać sensownie.
Dodałem trochę swoich poprawek i jest prawie OK.
Muszę dokleić kondki ( po 100 nF ) do przycisków i zlikwidować waitms.
To już kosmetyka - ogólnie już działa.
Tak dla kogoś , kto tak jak ja zaczyna wklejam kod.
Tabela 2 jest po to aby druga cyfra była wyświetlana z kropką.
To widać . --> kody zaczerpnięte z projektu Mirka.
Gość :)
Czyściłem rejestr kompa i nie zauważyłem że mnie nie zalogowało automatycznie :D
Jak do niczego go nie potrzebujesz to oprogramuj Timer0. Będzie robił za sygnał zegarowy który przyda sie do wszystkiego. Sciągasz sobie np. mkAVR Calkulator darmowy ze strony Atnel. W nim oprócz pomocy do Fusebitów jest też narzędzie do Timerów. Wpisujesz częstotliwośc swojego kwarca i czas co jaki chciałbys żeby robił przerwanie. Przykład: masz 8MHz i chcesz co 4ms - daje taki wynik -> preskaler 256, i załaduj do licznika 132. To wykorzystasz w programie.
Obsługa multipleksowania wyświetlacza może być wykonywana np. co 4ms i oko tego nie zauważy, a skan przycisków co 200ms (wykonuje się tylko gdy flaga 200ms ustawiona jest juz przez licznik)co nie wstrzymuje programu a daje czas między kolejnym Incr albo Decr. Potrzebny Bajt do zliczania i Bit.
Przy zgłoszeniu przerwania skaczemy do jego obsługi "Przerwanie" i tam ładujemy wartość z kalkulatora czyli 132. Timer nie zacznie od zera tylko od 132 i szybciej dojdzie do 255 i znów zgłosi potrzebę obsługi, ale to nasze wyliczone 4ms. Dodajesz je kolejno i po 50 masz 200ms. Po osiągnięciu 50 zgłoszeń wystawiasz Bit który częściej jest sprawdzany w pętli głównej ale tylko co 200ms jest podnoszony do 1. Jesli program widzi 1 warunek jest spełniony, wykonuja sie polecenia po warunku a na koniec kasujesz Bit i następny raz będzie można wykonać instrukcje gdy Bit zostanie ustawiony przez licznik(a multipleksowanie sobie działa nieprzerwanie). Rozbudujesz jak będziesz chciał bo pod spodem to przykład tylko, ale nawiązuje do Twojego projektu żeby było wiadomo jak go użyć.
Reakcja na guzik bedzie co odmierzony czas. Specjalnie tak najprościej to napisałem żeby zasada dzia była widoczna. Odczyt Pcfa tez możesz robić co jakiś czas.. W obsługach odczytów i zapisów jakichś urządzeń czasem trzeba na ich czas wyłaczyc przerwania, dokonac operacji i znów je włączyć.
Nie wiem czy to akurat dobry przykład ale jak szwankuje obsługa jakiegoś peryferyjnego to warto sprawdzić. Wtedy konieczne może być skorygowanie opóźnień w multipleksowaniu i zmiana wartości ładowanej do Timera.
BARTek
Moja strona
timer0
Dzięki za podpowiedź.
Co do timera0 to podejrzewam, że będzie mi potrzebny do obsługi
DCF77.
Idea jest taka :
Odbiór DCF77 --> wpisanie odebranych danych do zmiennych.
Zapis tych zmiennych do PCFa.
Wyświetlanie czasu.
Jako że odbiór nie zawsze jest dobry zegar ma pracować na PCF
a w nocy, gdy warunki propagacyjne rosną, a zakłócenia przemysłowe
słabną --> po odebraniu prawidłowej ramki DCF77 następuje
korekcja czasu w PCF8583.
Oczywiście tylko godzina i minuty mnie interesują.
Na razie mam tylko taką ideę, nie wiem jak to ugryźć programowo.
----------------------------------------------------------------------------
Ma razie tyle dopisałem, ale wiem, że to za mało.
zrobiłem
hej BARTek,
z ciekawości zrobiłem jak pisałeś z przerwaniem.
Zasadniczo działa jak w poprzedniej wersji, żadnych zmian dla oka nie ma.