Mając trochę wolnego czasu napisałem parę funkcji do obsługi układu PCF8583. Funkcja która ustawia godzinę i datę zapisuje też dane potrzebne do obliczenia pełnego roku, dzień tygodnia jest obliczany automatycznie na podstawie daty. Funkcje Pcf8583_write i Pcf8583_read można wykorzystać do zapisywania/odczytywania danych z wolnej pamięci ram. Dostępne...
I weź tutaj pomóż człowiekowi, skoro on sam sobie nie chce pomóc. Kobieto ogarnij się. Czy Ty te bajty RAMu to wykupujesz za funty, czy jak, że je tak oszczędzasz i bronisz się przed ich dołożeniem? Skoro rezerwujesz na string "sek" 2 bajty RAM, a funkcja itoa wklepuje tam 3 bajty, to jak myślisz, co się dzieje z tym 3-cim bajtem?
Tak na szybko mam takie rozwiązanie: Dim Go_s As String * 2 , Mi_s As String * 2 , Se_s As String * 2 Go_s = Str(godzina) Mi_s = Str(minuta) Se_s = Str(sekunda) Lcd Format(go_s , "00") ; ":" ; Format(mi_s , "00") ; ":" ; Format(se_s , "00") Wartości...
Podpowiem jedną rzecz. :) Nie definiuj nowych zmienny i nie pisz nowych funkcji żeby zapisać/odczytać rejestry alarmu, to jest gotowe. Przyglądnij się fragmentom pliku Config_PCF8583.bas : Config_PCF8583.bas jest: _clock_alarm , podczas kompilacji zmienne do obsługi alarmu zostaną dołączone. Teraz przykład jak odczytać jeden bajt Alarm Control Register...
olekewaagata a napisz jeszcze trochę takich ciekawostek np jak ustawić/ odczytać rok, bo jakoś nie idzie mi rozgryzienie tego??? wiem np. że bajt 5 to rok/data ale co z tym zrobić?? bajt 6 wyjaśniłeś jeszcze nie sprawdzałęm ale zakładam że już sobie poradzę
Jak zapisać zmienną która ma wartość np: 0 do 234524 do Ramu zegarka PCF8583 czyli podział to na bajty i czy muszę konwertować do BCD, potem odczytać odjąć 1 i znowu zapisać i tak aż do zera . Robie to na 89c2051 + PCF8583 +podtrzymanie baterii.
Witam, jak w temacie, czyli źle wyświetlają mi się cyfry na LCD w sensie tak chcą ( 00 -> 01 -> 00 -> 01 -> 00 -> 08). Nie wiem po jakiej stronie leży problem. Pracuje na płytce ewaluacyjnej GOTRONIK z Atmega32A z RTC PCF8583 ( INT-PD2, A0-GND, SDA-PC1, SCL-PC0) Umieszczam kody programu: Main.c [syntax=c]#define F_CPU 16000000L #include...
Po pierwsze, jesli jeszcze nie masz, to pobierz sobie dokumentację pdf, tego scalaka, na przykład stąd: http://katalogi.iele.polsl.gliwice.pl Jeśli dobrze pamiętam, to w PCF8583, trzeba skonfigurować bajt control/status (adres 00H), ustawiając bit 2, co odblokuje rejestr kontrolny alarmu (adres 08H). W tym rejestrze trzeba ustawić odpowiednie bity,...
No tak ale producent chyba o tym pomyślał i jakoś to rozwiązał. Hmmm tylko jak dla mnie starczą dwa bajty ale z kąd to wyciągnąć
Witam. Co jest zle w tym kodzie? Na wyświetlaczu za miast czasu wyświetla mi się wartość 165:165:165 Kod: $crystal = 16000000 $regfile = "m8def.dat" 'deklaracja zmiennej określającej godziny Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Sda = Portd.7...
zumek -> no właśnie, więc skoro generuje taki sam kod dla jednego i drugiego przypadku - to czy wg ciebie to normalne, że Slave w postaci ATmegi w odpowiedzi podaje po repstarcie ten pierwszy dodatkowy bajt ze swoim adresem??? - tak się składa, że akurat ten tryb nie jest dokładnie rozpisany w notach pdf i dlatego tak mnie to nurtuje. Bo przecież gdy...
Program przekopiowałem już toczka w toczkę z płyty dołączonej do książki, oczywiście zmieniłem pod moje podłączneie do procesora ukłądu pcf8583 ale nadal nie wywołuje przerwania ten układ i nic nie mogę z niego zczytać. Jak sprawdzić czy czasem w jakiś sposób nie uszkodziłem tego układu? Jedyna różnica przy podłączniu odbiegająca od książki to nie podłączone...
Wyciąłem tylko obsługę EEPROM bo mi to nie potrzebne. Jak by ktoś mógł by się przyjrzeć to był bym wdzięczny. [syntax=c] /* * main.c * * Created on: 2010-09-07 * Autor: Mirosław Kardaś * * Program korzysta ze sprzętowej obsługi I2C/TWI * Umożliwia zapis danych do RTC oraz EEPROM a także * oczyt z tych urządzeń * */ #include <avr/io.h> #include...
Jeszcze tańszy od PCFa jest MCP79410 firmy Microchip. To jest też RTC i ma 64 bajty wewnętrznego RAMu. Zasilanie 1,8÷5,5V Podtrzymanie zegara i RAMu baterią Li-Ion, napięcie podajesz na specjalnie do tego celu przeznaczoną nogę. [url=http://www.microchip.com/wwwproduct... katalogowa MPC79410
Dzień dobry, Mam następujący problem z tym zegarem: układ wydaje się nie liczyć prawidłowo niczego oprócz setnych części sekund. - Na wyjściu INT pojawia się przebieg prostokątny 1 Hz o wypełnieniu 50% - Komunikacja po sprzętowym TWI/I2C (ATmega16) funkcjonuje sprawnie, zapis i odczyt bajtów z innej lokalizacji pamięci RAM zegara daje oczekiwane wyniki....
Witam wszystkich Po nierównej walce z okiełznaniem PCF8583 udało się uruchomić zegar który w końcu poprawnie zapisuje datę.Pomógł z tym kolega Mundi1970 w tym wątku http://www.elektroda.pl/rtvforum/topic24... Teraz mam kolejny problem ,ponieważ do tego zegara dodałem termometr jednopunktowy z pomocą sieci i helpa udało się.Problem polega na tym...
Ok. inicjalicjalizacja: I2C1->TRISE = 10; // limit slope I2C1->CCR = 160; // setup speed ok 50kHz I2C1->CR2 = 8; // config I2C1 module- 8MHz I2C1->CR1|=1; // enable periferiall I2C1_control_structure.state=0; funkcja: void I2C_reciveInt(uint8_t address,uint8_t pointer, uint8_t* buff,uint16_t do_odebrania) { I2C1_control_structure.address=address;....
Usunąłem Wait 1 przy konwersji z DS18B20, działa, bez problemu ( na trzech przewodach ), tylko wyniki są opóźnione - tzn. wyświetlany wynik nie jest z aktualnego pomiaru, tylko z poprzedniego. Dodałem jeszcze dwa czujniki DS18B20. Ich zapis razem z godziną i datą na karcie jest jak najbardziej w porządku, tylko wyświetlanie trochę szwankuje - tzn. czasem...
[syntax=c] #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #include "include/lcd44780.h" #include "include/i2c_twi.h" //********** funkcje konwersji char dec_na_bcd(char num){return ((num/10 * 16) + (num % 10));}//set = dec_na_bcd(set); char bcd_na_dec(char num){return ((num/16 * 10) + (num...
Witam W ramach dalszego eksperymentowania z AVR i Bascom popełniłem połączenie odczytu z DS18B20 z sterowaniem wyjściem uC ( przez tranzystor FET ) + dodatkową atrakcję - buzer, który sygnalizuje wł/wył tranzystora/wyjścia. Chciałem dodać możliwość zmiany temp max i min, przez proste menu. Menu zrobiłem w oparciu inny mój kod obsługujący ustawianie...
Rezystory są już dane na płytce, zresztą zegar na PCF działa bez zarzutu ( no może trochę śpieszy, ale to kwestia kondensatora przy kwarcu ) sprawdziłem połączenia - nóżki 5 czyli SDA ( 24C02 i PCF8583 ) są podłączone do 23 nogi uC, czyli PC1-SDA. Podobnie z SCL. Teraz zrobiłem tak, że odczyt jest po włączeniu/resecie ( przed pętlą główna ), a zapis...
Nie za bardzo rozumiem o co Ci chodzi. Po zakonczonej transmisji SDA i SCL musza być HIGH inaczej magistrala bedzie uwazana za zajętą. Jezeli chodzi ci o to kiedy podajemy tam sygnal zegara to przed wyslaniem kolejnego bitu musimy zrobić ja low aby ustawic nastepny bit na SDA i za chwile zrobic high. - masz to na rysnku ponizej. http://obrazki.elektroda.pl/1347433500_1...
Przy robieniu schematu podpowiadali mi forumowicze, i mówili, że kondensatora i rezystora nie potrzeba. Czyli mam dodać pcf8583 + kwarc zegarkowy? Może i nie trzeba, ale są zalecane do tłumienia zakłoceń na zasilaniu. Biorąc pod uwagę koszt kondensatora i rezystora to żadna oszczędność w konfrontacji ze świętym spokojem. Generalnie zwiększą one odporność...
Przecież wystarczy zajrzeć do dokumentacji obu układów..... PCF8583: adres I2C ustawiany jako 0xA0/0xA2 (pinem zewnętrznym) 24C04: adres I2C ustawiony "na sztywno" jako 0xA0 dla pierwszych 256 bajtów i 0xA2 dla drugiej połowy. Masz ewidentny konflikt adresów! Te układy nie będą razem działać! Wstaw sobie EEPROM 24LC256, jego adres będziesz mógł sobie...
"single"-zajmuje cztery bajty - a Ty wykorzystujesz jeden. Więc nie single a byte-chyba że naprawdę trzeba. Dla pcf8574 można ustawić 8 adresów sprzętowo-jak mię pamięć nie myli-ściągnij datasheet. A0-A3 do + lub gnd.(to adresy) Jest jeszcze pcf8574A-jeszcze 8 adresów. Urządzenie peryferyjne-to nie jak ja to rozumiem-tylko jak jest. Peryferia w procesorze-przetworniki...
temat jest o zupie a wy o d... Pomijając wywody natury ogólnej masz kolego do wyboru wewnętrzną pamięć RAM od pcf-a i to nie małą bo 240 bajtów albo stałą od eeproma. Jedno i drugie jest dobre bo pcf ma podtrzymywanie bateryjne (chyba go uzywasz) ale kiedy bateria padnie to zapisy znikną więc pewniejsze jest umieszczenie tych informacji w pamięci eeprom....
A zegar RTC w tym projekcie jest juz użyty. Jaki to RTC? Archaiczne RTC (np PCF8573) nie miały (prawie) dodatkowej pamięci. Popularny PCF8583 ma blisko 256 bajtów. Nawet archaiczny RTC ma rejestry alarmu, które mogą służyć do przechowywania zmiennych. Jak wyliczyłeś te 10..20 słów dla zapamiętania czasu?
Schemat jest dobry więc to nie wina "elektroniczna". Jako że C nie znam to mogę tylko doradzić żebyć sprawe robił etapami: 1) najpierw spróbuj coś wyświetlić na LCD 2) odczytaj 1 bajt z I2C (np sekundy) i wyświetl go bezpośrednio na LCD, sprawdź czy faktycznie coś się zmienia co sekundę 3) odczytaj już wszystkie dane z PCF i sformatuj je do pokazania...
co oznaczają te zapisy: uint16_t days:6; uint16_t yr:2; uint16_t month:5; uint16_t weekday:3; tzn chodzi mi o te dwukropki a po nich jakaś liczba - to chyba nie jest przypisanie wartosci? Liczba po dwukropku oznacza ilość bitów, które zajmuje zmienna. np.:uint16_t days:6; uint16_t yr:2; oznacza, że days zajmuje 6 a yr zajmuje 2 bity...
A możesz skontaktować się ze mną na gg?? Wytłumaczyłbym Ci trochę, bo tak trudno trafić, co już wiesz a czego jeszcze nie!! Wszystko w zasadzie można wyczytać z pdf-a, opisującego PCF8583, do pobrania ze strony Philipsa. Ogólnie mogę powiedzieć tak: 1. Rok: Właściwe rejestry zegarowe PCF8583 nie przechowują całej liczby oznaczającej rok, a jedynie cyfrę...
dziękuję koledze Bdeath za przykład kodu. Pomogło! Niestety pojawił się kolejny problem... odczytuję kolejne bajty, zamieniam z bcd na dec, tylko że, sekundy są zliczane do...90....
Zapis rób przy wyjściu z menu, odczyt przed pętlą główną, a bieżące zmiany od razu podczas pracy menu ładuj do PWM - nie ma sensu robić czegoś takiego: Nastawa->EEPROM; EEPROM->PWM. Zamiast tego: Nastawa->PWM i zaraz potem Nastawa->EEPROM; Pamięci AT24CXX zorganizowane są bajtami - w jednej komórce zatem przechowasz 1 bajt.
Przepraszam moje nie dopatrzenie , co do Twojego kodu ,wkleje swoj do obsługi TWi działający ponieważ widzę pewne róznice w kodach : void TWI_INIT(void) { TWSR = 0; /* no prescaler */ TWBR = ((16000000/F_TWI)-16)/2; /* must be > 10 for stable operation */ } // procedura transmisji sygnału START void twistart(void)...
Wielokrotnie wałkowane. W przerwaniu wrzuciłeś transmisje I2C, CLS, obsługę LCD i inne bzdety. Wydłub to i wstaw do pętli głównej programu. W przerwaniu ustaw tylko sobie jakiś bajt/flagę że coś się stało. Teraz obsługa przerwania zajmuje dłużej niż czas pomiędzy przerwaniami. To się musi sypać. Z PCFa możesz też wyciągnąć sygnał zegarowy (skonfiguruj...
RTC (PCF8583) na adresie 162/163 i eeprom 24c16 na 160/161 to nie ma sensu przecież. Pinów A0 A1 i A2 24c16 w eepromie nie można samemu ustawiac, bo układ używa ich do przełączania sobie storn pamięci, poza tym ten eeprom ma osiem stron pamieci po 256 bajtów. Wynika z tego że zajmuje wtedy: 160/161, 162/163 , 164/165 itd. do 174/175 Czyli adres RTC...
No to jak się zastanawiałeś nad tym, to powinieneś zaskoczyć o co chodzi... Po prostu należy najpierw wyłączyć maskowanie roku i dnia tygodnia (więc zamiast 8 do rejestru 0 wpisać wartość 0), potem odczytać cały bajt, zamaskować niepotrzebne bity w danym bajcie: najpierw rok i odczytać dzień miesiąca, potem zamaskować dzień miesiąca i odczytać rok -...
1. Jeżeli to ma być typowa sygnalizacja świetlna - czyli sekwencyjne przełączanie świateł to po co RTC ??? Wystarczy zwykłe przerwanie od Timer'a ! 2. Jeżeli jednak ma być RTC to jakie "impulsy" kolega chce zliczać ??? - w programie to raczej w takim wypadku trzeba odczytywać non-stop RTC i czekać na odpowiednią godzinę:minutę:sekundę......etc. 3. W...
Witam więc sprawa sie wyjaśniła dzięki koledze jarekgol. Mój bląd polegał na tym ze w po odczycie ostanie go bajtu dawałem sygnał ACK, a jest on nie potrzebny
Wilku: Tu masz krotka procedurke odczytu: i2cstart i2cwbyte 162 i2cwbyte 5 i2cstart i2cwbyte 163 i2crbyte zmienna1 , ack i2crbyte zmienna2 , nack i2cstop I teraz w calym zapisanym bajcie w zmiennej "zmienna1" masz informacje o dacie, bity 0-5 (kod BCD) i roku - ostatnie dwa bity (kod binarny) - patrz PDF dla pcf8583 Musisz rozdzielic ten bajt na dwie...
Projektuję urządzenie które musi przechować 200 bajtów danych przez minimum 15 lat przy jak najmniejszych gabarytach. Zastanawiam się nad PCF8583 i baterią CR2032 ( 225mAh ) Z noty PCF8583 wynika że w trybie "data retention" pobiera 2uA przy VCC 1.0V czyli przy baterii 3V to będzie 6uA. To wystarczy jedynie na około 5 lat. Zastosowanie baterii CR2450...
Witam! Zaczynam swoją przygodę z AVR i mam mały problem. Chciałem ustawić godzinę i datę i wszystko cacy poza tym, że gdy dzień miesiąca dojdzie do 30 to przeskakuje na 10 zamiast 1. Próbowałem też zamaskować rok,ale bez skutku Nie mam pojęcia dlaczego tak się dzieje. Poniżej umieszczam fragment kodu i proszę o pomoc: [syntax=c] // Ustawianie czasu...
Oprócz samego RTC masz w pcf8583 jeszcze 240 (o ile sie nie mylę) bajtów pamięci. Wykorzystaj to. A w jaki sposób - a w jaki chcesz - coś wymyśl - można to zrobić na 100 sposobów, np. 1 komórkę pamięci przeznacz na aktualny rok (licząc np. od roku 2000), drugą na poprzedni odczytany rok z pcf8583. Porównując wartość komórki pamięci zawierającej ten...
Witam, dopracowywanie softu napisanego w Bascomie - zajmuje 8190 bajtów. To dlatego osobny układ do sterowania ledami RGB :) PWM na timerze przy częstotliwości rzędu 100Hz nie zająłby Ci wiele czasu procesora. Z początku chciałem przechowywać te dane w pamięci EEPROM ale liczyło by się to z szybkim "uszkodzeniem" tej pamięci Masz jeszcze do dyspozycji...
a nie łatwiej będzie podłączyć alternatywne zasilanie do procesora? bateria 9V + 78l05. a do komparatora podać 2 napięcia: z podzielnika bezpośrednio z baterii i z podzielnika ze stabilizatora, jeśli napięcie na baterii spadnie do krytycznej wartości to wtedy zapisać dane do zewnętrznego eeproma dowolnego typu, i uśpić układu (co by oznaczało że niema...
1) Sprawdź czy jest właściwe napięcie zasilania (2.5-6V). Jeśli napięcie na scalaku jest wyższe niż 6V wtedy będzie taki efekt jak u Ciebie. 2) Sprawdź czy działa oscylator. 3) Upewnij się, że w rejestrze 'control/status' (bajt 0 w pamięci) bity b3, b4, b5, b6, b7 są wyzerowane.
W tym układzie zmienne H i M są w kodzie BCD czyli jeśli np. jest 12 to przechowywane jest w postaci 0001 0010. Nie musisz nic robić poza wyłuskaniem połówki bajtu. Makebcd poza tym zamienia właśnie z postaci 0000 1010 (BIN) = 12(DEC) na to co powyżej.
:arrow: Bęben, polecenie wait w programie napędzanym przez Timer? Po odebraniu ostatniego bajtu informacji master nie wystawia znacznika ACK tylko NACK. Pomijam kwestie sterowania wyświetlaczy, którą trzeba spokojnie zrobić od nowa... najlepiej na spokojnie na kartce papieru ;).
program napisany jest w asmemblerze według takiego schematu jak ty dałeś. wiem tylko jedno. program odczytuje tylko jeden bajt (pierwszy). czyli jak ty masz adres komurki =2 to mi odczyta sekundy- reszta będzie=0, jesli adres będzie równy 3 to odczyta minuty, następne bedą równe zero....
Jakby się uprzeć, to wystarczy do wszystkiego 1 timer wywołujacy przerwanie, a każdej obslugiwanej pierdółce można założyć bajtowy licznik w RAM (typowo 1 lub 2 bajty), odliczajacy do 0, jezeli jest zero, to wykonuje co trzeba i resetuje licznik do wartości (mierzony czas)/(czas pomiędzy kolejnymi wywołaniami timera), procek się specjalnie nie zatyka,...
Przykład masz we własnym kodzie. Z tą różnicą, że czytasz nie z rejestru 2 tylko 6 i czytasz 1 bajt, a nie 3. Do przesunięcia używasz [url=http://www.avrhelp.mcselec.com/inde...
void PCF8583::get_time(){... Wire.beginTransmission(address); Wire.write(0xC0); // stop counting, don't mask Wire.endTransmission(); Wire.beginTransmission(address); Wire.write(0x02); Wire.endTransmission(); Wire.requestFrom(address, 5); second = bcd_to_byte(Wire.read())...
bajty polskie bajty cykle zamień bajty
usuwanie konta użytkownika windows termostat modbus suszarka edh97981w
marpol prostownik marpol prostownik
Zmiana kanałów radiowych w aucie z Kanady na europejskie Indesit WIS 105 - migająca dioda kluczyka, brak reakcji