Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATtiny26, LCD Nokia3310 i problem z alarmem pcf8583

INF-EL 27 Feb 2008 22:38 2368 7
Optex
  • #1
    INF-EL
    Level 13  
    Zbudowałem sobie zegarek z tiny26 + pcf8583 + wyświetlacz nokia3310.
    Trochę mało pamięci na znaki i kod programu ale w wersji minimalnej działa poprawnie.
    Dla ciekawostki dodam, że wyświetlacz działa przy zasilaniu 5V i jeszcze się nie uszkodził (mimo zaleceń na 3.3V).

    Niestety jak na zegarek naręczny byłby drogi w eksploatacji.
    Pożera mi 1 baterię 3V (za 10 zł) na dobę.

    Cały zegarek (procek,pcf i wyświetlacz) pobiera:
    normalnie 0.9 mA
    w Idle 0.38 mA
    w powersave 0.085 mA
    w powerdown 0.083 mA

    Sam pcf pobiera max 200uA podczas komunikacji i2c, a jeśli tylko sobie cyka to liczę, że 50uA lub 10uA.
    Wymyśliłem, że będę go programowo usypiał, a raz na minutę obudzi go przerwanie zewnętrzne z pcf'a. Procesor wyświetli czas i pójdzie spać.

    W ten sposób 10 krotnie wydłużę czas działania.

    Niestety nie potrafię ustawić alarmu w pcf.
    Wszystko inne działa, np. ustawiając flagę mogę włączyć i wyłączyć stan 0 na INT. Ustawiam i odczytuję czas i rejestry kontrolne.
    A alarm się nie wywołuje
    Notę katalogowa czytałem, odpowiedzi na forum też.
    Muszę robić gdzieś mały błąd.

    Czy kod inicjujący pcf'a i ustawiający alarm w Bascomie jest poprawny ?
    Code:
    Sub Setzegar()
    
     I2cstart
     I2cwbyte &HA0                      ' adres PCF8583
     I2cwbyte &B00000000            ' adres następnej komórki do zapisu

     I2cwbyte &B00000100            ' 0 rejestr kontrolny (00000100 = zezwolenie na alarm)

     I2cwbyte &B00000000             ' 1 setne sekundy
     I2cwbyte &B00010000             ' 2 sekundy (ustawione na 10)
     I2cwbyte &B00000000             ' 3 minuty
     I2cwbyte &B00000000             ' 4 godziny
     I2cwbyte &B00000000             ' 5 rok (b6-b7) / dzień (b0-b5)
     I2cwbyte &B00000000             ' 6 dzień tyg (b5-b7) /mies (b0-b4)
     I2cwbyte &B00000000             ' 7 rejestr timera

     I2cwbyte &B10010000             ' 8 rejestr alarmu (10010000 = aktywny alarm dzienny)

     I2cwbyte &B10000000             ' 9 alarm ułamków sekund
     I2cwbyte &B01010101             '10 alarm sekund (ustawiony na 55)
     'I2cwbyte &B10000000             '11 alarm minut
     'I2cwbyte &B10000000             '12 alarm godzin
     'I2cwbyte &B10000000             '13 alarm dni

     'I2cwbyte &B10000000             '14 alarm dnia tygodnia (b5-b7) i miesiąca (b0-b4)
     'I2cwbyte &B10000000             '15 alarm timera
     I2cstop
    End Sub

    ATtiny26, LCD Nokia3310 i problem z alarmem pcf8583

    Zegarek sobie poprawnie chodzi. Programowo o każdej 5 sekundzie przechodzi w stan powerdown. Na wyświetlaczu pozostaje ostatnia godzina. Żeby uaktualnić czas na wysw. wybudzam go przyciskiem (INT0) i jest ok.
    Alarm w pcf ma się uruchamiać, w tym przypadku, w każdej 55 sekundzie minuty przez całą dobę ale się nie uruchamia.

    Może istotna jest kolejność ustawiania rejestrów ?
  • Optex
  • #2
    asembler
    Level 32  
    A czemu nie zrobisz wybudzania od procesora? A tak w ogóle to po co PCF?
  • Optex
  • #3
    Ch.M.
    Level 27  
    Skarzysz się na prądożerność, a nie widze nigdzie schematu...
    Inna sprawa to zasilanie 5V - po co ?
    Bateria 3V wystarczy i dla procka i pewnie dla LCD. PCF sobie poradzi z o wiele niższymi napięciami także przy komunikacji.
    Tak jak inni Ci sugerują wybudzaj procka przerwaniem co 8s i usypiaj 6-7razy zanim zainicjujesz komunikację z PCF (jeśli nie poradzisz sobie z alarmem).
    Różnica między power down a save jest zbyt mała, coś pożera Tobie dużo prądu...
    Pozdrawiam
  • #4
    INF-EL
    Level 13  
    5V stosowałem testowo
    Całość zasilam z baterii 3V wtedy też procek i pcf pobiera mniejszy prąd.
    Co 8 sek przerwaniem, ale jakim ?
    Timera procka ?

    Udało mi się ustawić alarm.
    Zmieniłem kolejność (chyba to była przyczyna) wpisów do pcf.
    Najpierw wpisałem sekundy alarmu a potem ustawiłem rejestr 00 i 08.
    Jeszcze pozostał mi problem, że alarm wywołuje się tylko raz, ale pewnie jak skasuję flagi w pcf to będzie ok.
  • #5
    Ch.M.
    Level 27  
    Hmm pewnie wystarczy skasowac flagę, ale nawet wpisanie od nowa nastaw alarmu nie bedzie wielkim problemem.
    Co 8s przerwanie masz od watchdoga, który też jest konfigurowalny i moze pracować wywołując tylko przerwanie przy przepełnieniu. Co prawda pomyliłem się, w tiny26 przerwanie jest max co 2.2s, ale skoro i tak działa Cialarm więc nie musisz kombinować :)
  • #6
    INF-EL
    Level 13  
    Dzięki za uwagi.
    Przesunę jeszcze wzorce znaków do eeprom to zyskam trochę flash na program.
    Jak już wszystko będzie działało to zrobię od nowa układ na atmega8 smd.
    W Tiny26 brakuje mi pamięci na znaki (japońskie) i program.
    Spróbuję napisać program w C na AVRstudio.
    Chciałem dodać obsługę termometru DS18b20, pilota na podczerwień i wyświetlać harmonogram zadań na dany dzień.
    Byłby on wczytywany z PC podczas doładowywania ewentualnego akumulatorka.
    Robiłem takie rzeczy w asm na At894051 ale chyba już czas o tej rodzinie zapomnieć.

    Jak zbuduję to się pochwalę.
    No i projekt będzie miał sens przy wymianie 1 baterii miesięcznie maksymalnie.
  • #7
    asembler
    Level 32  
    Częstą przyczyną zwiekszonego poboru prądu jest złe ustawienie portów przed uśpieniem procesora.
  • #8
    INF-EL
    Level 13  
    Zrobiłem jednak wybudzanie na timerze w pcf8583.
    Co 1 sek. lub co minutę (wtedy nie pokazuję sekund).
    Niestety oprócz kasowania flagi w rejestrze 00 (bit 0) trzeba ustawiać za każdym razem liczbę w rejestrze 07, który odlicza jednostki (ss/s/m/h/d w zależności od ust. bitów 0,1,2 w rej. 08 ) od ustawionej liczby do 99
    Aktualnie zasilam z 3 akumulatorków 1.2V NiMH = 3.6V. o średnicy 15mm i grubości 5mm.
    Będzie problem z upakowaniem ich w obudowę zegarka.

    Ktoś może ma namiar na mniejsze wymiarowo akumulatorki o napięciu 3-3.6V ? (mogą być drogie - w końcu to zegarek mający ambicje być lepszy od http://www.conrad.pl/glowna.php?art=840924&back=serch )

    Na tych 3 akumulatorkach przy wybudzaniu co sekundę zegarek chodził przez miesiąc.