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

Miernik do zasilacza na HD44780 i ATtiny13

manekinen 08 Feb 2010 07:52 37110 31
phoenixcontact
  • Miernik do zasilacza na HD44780 i ATtiny13
    Projekt powstał z czystej ciekawości… co można zrobić na Attiny13? Otóż można, i to dużo. W tym przypadku ten malec zmierzy nam napięcie, prąd, temperaturę, przeliczy, a wyniki w przystępny sposób pokaże na wyświetlaczu alfanumerycznym (typu HD44780). Jak by tego było mało, program został napisany w bascomie. Pomimo nietypowych rozwiązań, układ może z powodzeniem służyć jako tytułowy miernik do zasilacza w miejscach gdzie nie jest wymagana duża dokładność. Wymiary płytki to tylko 35mm x 16mm. Polecam osobom które do lampki RGB pchały mikrokontrolery wielkości atmega8 ;)

    Zakres pomiaru napięcia to 0-99V z rodzielczością 0.1V, zrealizowany na dzielniku R/R. Zakres pomiaru prądu to 0-9.99A z z rodzielczością 10mA, zrealizowany na boczniku R 0.1 ohm. Napięcie odniesienia to wewnętrzne napięcie referencyjne 1.1V, przy prądzie 10A spadek napięcia wynosi aż 1V, ale w zamian mamy w miarę wysoką rozdzielczość w całym zakresie i brak potrzeby stosowania wzmacniacza operacyjnego (i tworzenia mu ujemnego napięcia zasilającego). Zakres pomiaru temperatury 0-99*C z rozdzielczością 0.1*C – sam pomiar zrealizowany na analogowym czujniku LM35. Oczywiście dzielnik R/R napięcia jak i bocznik pomiaru prądu należy dobrać tak aby nie przekroczyć napięcia referencyjnego 1.1V, a tym bardziej dopuszczalnego napięcia portu 5V.

    Ustalanie zakresu pomiaru i klibracja:
    Przede wszystkim dobrze jest wiedzieć w jakim zakresie napięcia miernik ma pracować, będzie dokładniejszy w mniejszym (potrzebnym) zakresie, a mniej dokładny w wiekszym (którego przecież nie wykorzystamy). Aby to ustawić należy obliczyć dzielnik napięcia. Przykładowo dla uzyskania pomiaru do 10V, dzielnik powinien wynosić 1/10 (mnożymy x 10 ponieważ napięcie wejściowe będzie 10 razy większe od referencyjnego 1V), dla 30V będzie to 1/30 itp. W takim przypadku rezystor R.DZIEL będzie wynosił 3Kohm, ale doliczając 2K5ohm potencjometr do kalibracji powinniśmy użyć rezystora ok 1K8ohm aby mieć pełną regulację. Następnie należy dostosować program do danego zakresu (przykładowo 30V). Nasze 30V mnożymy przez 640, a wynik dzielimy przez 1023. Uzyskaną liczbę w przybliżeniu wpisujemy na początku programu do stałej const napiecie a program kompilujemy (standardowo jest to zakres 100V, R.DZIEL wynosi wtedy 8K2ohm). Pomiar prądu również możemy dostosować w podobny sposób, dać inny dzielnik, inny zakres i przeliczyć, ale nie będę już tego opisywał. Nie ma analogowej kalibracji temperatury bo wydała mi się ona całkowicie zbędna. Temperaturę dobrałem doświadczalnie w programie, odpowiada za to stała const temp. Rezystor 1K pomiędzy GND a wyjściem czujnika ustawia jego prąd, można go zmniejszyć nawet do 100ohm ale należy liczyć się z tym że czujnik zacznie się grzać i wprowadzać błąd.

    Wady:
    Tak prosty układ ma oczywiście swoje wady. Pierwszy rezystor dzielnika jest stały i powinien wynosić 100ohm. Tutaj wyjaśnie problem używania tych samych pinów do obsługi LCD i pomiaru ADC… Linie LCD w stanie wejścia wymagają ok. 80uA prądu aby je ściągnąć całkowicie do GND, decydują o tym wewnętrzne pullupy. Rezystor dzielnika 100ohm nie ściągnie oczywiście tej linii tak jak trzeba, pozostawiając około 7mV względem GND – i jak nie trudno się domyśleć przetwornik taką wartość odczyta (ok. 7/1023). Ponieważ zastosowanie rezystora o jeszcze większym oporze nie wchodziło w grę – z powodu zbyt dużego obciążenia portu podczas wysyłania danych do LCD – najprostszym sposobem okazało się zwykłe odejmowanie tych 7mV w programie (stała const pullup). I tutaj dochodzimy do sedna, wyniki pomiarów nie będą idealnie liniowe, szczególnie w zakresie 0-5V kiedy wyświetlacz wprowadza błąd pomiarowy. Drugi problem to pomiar prądu, bez wzmacniacza operacyjnego nie można się pokusić o odpowiednią regulację – prąd możemy regulować tylko “w dół”, czyli to co odłoży nam się na boczniku możemy ściągnąć jeszcze do GND potencjometrem 10K – i tutaj uwaga, wpływ na regulację prądu ma znowu pullup wyświetlacza więc należałoby trochę tutaj poeksperymentować przez wlutowaniem elementów, być może będzie trzeba dać potencjometr o szerszym zakresie, lub jeśli napięcie odkładające się na boczniku będzie za małe, podnieść nieco wartość stałej const prąd w programie. Program tiny13lcd_9_64-sample wykonuje 64 próbki dla każdego pomiaru i wyświetla średnią. Dodatkowo wyświetlane wartości nie przekroczą 999 i wyświetlanie się nie rozjedzie.

    Miernik do zasilacza na HD44780 i ATtiny13

    Co i jak:
    Do punktu V+ na płytce dołączamy napięcie które chcemy mierzyć, do punktu GND dołączamy wejście masy zasilacza, a do punktu V- dołączamy wyjście masy (pomiar odbywa się na masie). Między punkty GND a V- dołączamy bocznik. Zasilanie dla układu pobierane jest z punktu V+ poprzez stabilizator typu 7805. Na płytce jest miejsce na stabilizator w obudowie TO252, ale z powodzeniem można użyć stabilizatora 78L05 w obudowie TO92 (układ wraz z podświetleniem LCD pobiera około 35mA). To stabilizator decyduje o tym jakie maksymalne napięcie możemy podać do punktu V+, dla zwykłego 7805 będzie to do 35V, dla 78L05 będzie na pewno mniejsze, nie więcej jak 30V. Aby mierzyć większe napięcia, układ należy zasilić oddzielnie – po stronie druku należy przerwać ścieżkę pod potencjometrem regulacji napięcia a zasilanie podać do punktu ZAS. Układ współpracuje z wyświetlaczem o organizacji 16*1 pól ze sterownikiem HD44780 lub kompatybilnym, do demonstracji zastosowałem wyświetlacz 16*2. Płytka jest dostosowana tak aby można było ją podlutować pod wyświetlacz, w prezentacji do połączenia użyłem taśmy ATA bo nie miałem wyświetlacza bez pinów.

    Fusebity:
    Należy ustawić pin reset jako zwykły pin (włączyć fusebit RSTDISBL) – UWAGA! – przed wykonaniem tej czynności upewnij się 10 razy że odpowiednio zaprogramowałeś procesor i wszystko dobrze ustawiłeś, bo po wyłączeniu resetu nie będziesz miał już dostępu do procesora zwykłym programatorem! Program zoptymalizowałem najlepiej jak mogłem, w chwili obecnej zajmuje 1020 bajtów. Źródła jak zawsze są u mnie dostępne, jeśli ktoś zechciałby napisać ten program w C to proszę bardzo :) W programie zaremowane wartości są do testów na Atmega8.


    Miernik do zasilacza na HD44780 i ATtiny13 Miernik do zasilacza na HD44780 i ATtiny13 Miernik do zasilacza na HD44780 i ATtiny13 Miernik do zasilacza na HD44780 i ATtiny13

    Miernik do zasilacza na HD44780 i ATtiny13 Miernik do zasilacza na HD44780 i ATtiny13 Miernik do zasilacza na HD44780 i ATtiny13 Miernik do zasilacza na HD44780 i ATtiny13

    Filmik, jeszcze z pierwszej wersji programu który nie wykonywał wielu próbek i nie wyświetlał średniej. Druga wersja nie posiada ustawień i domyślnie mierzy w zakresach 0-100.




    W załączniku niezbędne pliki.

    Cool? Ranking DIY
    About Author
    manekinen
    Level 29  
    Offline 
    manekinen wrote 1629 posts with rating 2330, helped 76 times. Live in city Kętrzyn. Been with us since 2006 year.
  • phoenixcontact
  • #2
    Manio95
    Level 21  
    Bardzo fajny projekt.Sam myślałem nad zrobieniem Miernika do mojego zasilacza ale na atmega8 .Jest ona bardzo duża a można to zrobić na takim małym procesorze ATtiny13 więc raczej zrobię właśnie ten projekt.I moje pytanie wiem że nie z tego działu ale czy ATtiny13 można programować tak jak atmegę prosto z portu LPT bo on ma mosi,miso reset sck czy trzeba już jakiś inny programator?
  • #3
    regrom
    Level 16  
    Miniaturyzacja jak najbardziej ok :),

    W jaki sposób dokonujesz pomiaru w ADC, jakieś uśrednianie wyników free running, czy raczej single conversion?

    Z tego co jest napisane powyżej, pomiar chyba jest zatrzymany na czas wysyłania danych do wyświetlacza?

    Schemat ideowy posiadasz?
  • #4
    kamilelektryk
    Level 12  
    W jakim oprogramowaniu projektujesz płytki?
  • #5
    swierkdeck
    Level 2  
    Wydaje mi się, że jest to Eagle z dodatkiem Eagle3D i renderem w PovRay.
    Może jeszcze zapytam, jak wykonujesz takie znakomite płytki?
  • #6
    11111olo
    Level 42  
    ATTiny programuje się przez ISP jakk każdy inny AVR.
  • #7
    *vip*
    Level 17  
    swierkdeck wrote:
    Wydaje mi się, że jest to Eagle z dodatkiem Eagle3D i renderem w PovRay.
    Może jeszcze zapytam, jak wykonujesz takie znakomite płytki?


    Widać ślady termotransferu ;]

    Gratuluję dobrego wykorzystania tego małego mikrokontrolera.
  • phoenixcontact
  • #8
    Manio95
    Level 21  
    regrom wrote:
    Miniaturyzacja jak najbardziej ok :),


    Schemat ideowy posiadasz?


    Schemat jest w załączniku :).
    Fakt faktem że przydało by się go wrzucić od razu na stronę.

    A przy okazji ja dodam schemat z pliku, bo nie każdy chce pobierać :)
    Miernik do zasilacza na HD44780 i ATtiny13
  • #9
    Daniel_GSM
    Level 25  
    Oczywiście gratuluję projektu.

    Pytanie mam jednak troszkę inne - w jaki sposób w Eagle wykonać taką super prezentację płytki z elementami w 3D?

    Ściągnąłem demo Eagle w wersji 5.7.0
  • #10
    BuBos18
    Conditionally unlocked
    Daniel_GSM wrote:
    Oczywiście gratuluję projektu.

    Pytanie mam jednak troszkę inne - w jaki sposób w Eagle wykonać taką super prezentację płytki z elementami w 3D?

    Ściągnąłem demo Eagle w wersji 5.7.0

    http://www.matwei.de/doku.php?id=en:eagle3d:eagle3d
    https://www.elektroda.pl/rtvforum/topic54611.html
    http://www.societyofrobots.com/electronics_Eagle3D_tutorial.shtml
  • #11
    djoy
    Level 15  
    Ciekawy projekt, ale i tak wszystko zależy od ekonomi. U mnie taniej sprzedają atmege8 niż attiny13, także wybrałbym atmege i nie cisnął bym się na tych kilku wyprowadzeniach attiny, no chyba że miałbym attiny taniej :)
  • #12
    dydelf
    Level 12  
    Miernik fajny. Gratulacje za wielkośc i jakość wykonania płytki.
    Tylko, że w tym wypadku wielkość płytki i tak narzuca wyświetlacz, więc niekoniecznie trzeba dążyć aż do takiej miniaturyzacji. Zrobiłem kilka podobnych układów na 8051 i Atmega z takim wyświetlaczem i nigdy nie miałem kłopotów ze zmieszczeniem elementów na płytce.
  • #13
    PO.
    Level 20  
    Przede wszystkim gratuacje za wielkość :) - wielkości wyświetlacza czyli całość zajmuje "nic".

    A teraz uwagi/czepianie się. Tiny13 uzasadnione jest tylko rozmiarem (i to rozumiem akurat, ale znowu nie aż tak), ja w projekcie z lcd nie schodzę poniżej Mega8 (a i to niechętnie, wolę 88 :P) - kosztuje maks 4zł więc nie zawyża budżetu znacząco (chyba że klepiemy masówkę...) a daje nieporównywalne możliwości rozwojowe projektu, całość i tak kosztuje więc nie warto (dziś) oszczędzać.

    Bascom :( - nie wykorzystam kodu, choć może oprę się kiedyś na zasadzie działania. W przepisywanie na żywca w c nie będę się bawił, mniej czasu zajmie napisanie od zera. Ale i tak gratulacje upakowania kodu jak na bascom.

    Największa wada: kolejny projekt wymagający rekompilacji, żeby coś zmienić! Ludzie, używajcie !@#$ eepromu - on po to jest, żeby spod konkretnych adresów czytać ustawienia, zmiana czegoś nie wymagałaby zaglądania do kodu tylko wpisania jednego bajtu (dwóch jeśli int) w hexedicie i wyeksportowania całości do intel_hex...
    Jak robicie projekty "dla ludzi" to róbcie je naprawdę dla ludzi.
    No ale oczywiście kod by spuchł ;) (i może dlatego używam mega...).
  • #14
    manekinen
    Level 29  
    Oczywiście że można użyć Atmega8 bo kosztuje praktycznie tyle samo, a wszystkie elementy w wersji przewlekanej można upchać na płytce wielkości wyświetlacza. I pozbywamy się błędu pomiarowego, miniaturyzacji. Ten miernik to taka ciekawostka, tak jak napisałem, co można upchać w jeden mały Attiny13. Po prostu mowę mi odbierało gdy widziałem kolejną lampkę RGB na Atmega8 :) A na Atmega8 to można, zrobić sobie odtwarzacz mp3 z obsługą kart SD i systemem FAT16 albo i więcej.

    Co do kodu - miał tam być jeszcze pomiar mocy (zwykłe mnożenie A i V) ale pomimo prób nie udało mi się tego wepchać. A dokładnie to samego mnożenia. Próbowałem też robić własne mnożenie, najpierw metodą Bootha a potem zwykłe mnożenie liczb binarnych - ale nic z tego nie wyszło. Eeprom - na początku chciałem napisy i inne stałe wrzucić do eeprom, ale jak się szybko okazało samo użycie funkcji odczytu eeprom mocno powiększało kod. Potem walcząc o bajty dorzuciłem jeszcze m.in. $noramclear który nie czyści pamięci po resecie. A co ciekawe - czym nowsza wersja bascoma - tym większy kod generuje.

    regrom, wykonuje 64 próbki dodając je do siebie, na końcu przesuwam wynik o 6 bitów co się równa dzieleniu przez 64 (znów optymalizacja, użycie dzielenia nie wchodziło w grę). Oczywiście ze pomiar jest zatrzymywany, przecież aby coś wyświetlić, piny muszą pracować w roli wyjść.

    Manio95, jeśli masz zamiar robić to lepiej zrób to normalnie na Atmega8. Bez problemu zmieścisz Atmega8 i inne elementy za wyświetlaczem. No, chyba że te wady Ci nie przeszkadzają.
  • #15
    PO.
    Level 20  
    Też prawda, że jako ciekawostka :) . Ale na gołym a8 to mp3 nie wrzucisz, musi być coś jeszcze.
    Mi kody rosną bo przestałem być ekstremalistą, lubię dodać czasem wodotryski, no i piszę wspólne biblioteki do wielu projektów - choć są zadziwiająco optymalne i tak.
    Jak chciałeś wrzucić do eepromu, to zwracam honor ;) .
  • #16
    Lucki
    Level 21  
    Kolego a co zmienić aby wykorzystać wyświetlacz lcd od nokii 3310 ?
  • #17
    Freddy
    Level 43  
    manekinen wrote:

    ...

    W załączniku niezbędne pliki.

    W Twoich plikach .brd z Eagle'a jest błąd, płytka tak wykonana nie ma prawa działać.
  • #18
    manekinen
    Level 29  
    Możesz mówić jaśniej? Otworzyłem te pliki i płytka wygląda ok, po za tym na podstawie właśnie tych plików wykonałem swoją.
  • #19
    Freddy
    Level 43  
    Mogę oczywiście, byłem ciekawy czy sam znajdziesz.
    Wydruki są OK, ale zobacz na plik .brd brakuje masy do procesora. Zobacz poniżej
    Miernik do zasilacza na HD44780 i ATtiny13
  • #20
    manekinen
    Level 29  
    Po załadowaniu pliku wypada kliknąć przycisk ratsnest ;) Nie łączyłem tam ścieżki bo masa i tak jest wylana jako polygon.
  • #21
    Freddy
    Level 43  
    manekinen wrote:
    Po załadowaniu pliku wypada kliknąć przycisk ratsnest ;) Nie łączyłem tam ścieżki bo masa i tak jest wylana jako polygon.

    Tylko nie każdy o tym wie.
  • #22
    TOMI
    Service technician RTV
    Projekt super, tylko troszkę szkoda marnować tej drugiej linijki LCD. Fajnie by było gdy by jeszcze przeliczał wyniki pomiarów na moc czyli U*I a przy okazji rezystancję U/I.
  • #23
    maniek1818
    Level 22  
    Freddy wrote:
    manekinen wrote:
    Po załadowaniu pliku wypada kliknąć przycisk ratsnest ;) Nie łączyłem tam ścieżki bo masa i tak jest wylana jako polygon.

    Tylko nie każdy o tym wie.

    Tak na marginesie jak ktoś projektuje PCB w paincie, to właśnie zazwyczaj nie wie :D

    Jaki rozmiar miałby program bez funkcji pomiaru temperatury, właśnie żeby dopisać funkcję obliczania MOCY.
    Pozdrawiam
  • #24
    Freddy
    Level 43  
    maniek1818 wrote:

    ...
    Tak na marginesie jak ktoś projektuje PCB w paincie, to właśnie zazwyczaj nie wie :D
    ...

    :):):) Tacy też są, ja używam Protel 99SE i / lub SprintLayout.
    Quote:

    ...
    Fajnie by było gdy by jeszcze przeliczał wyniki pomiarów na moc czyli U*I a przy okazji rezystancję U/I.
    ...

    Można dodac jeszcze sterowanie wentylatorem :) ale nie w tym procesorku :)
  • #25
    manekinen
    Level 29  
    TOMI - nie marnuje się. To jest na 16*1 ale że nie miałem takiego to zaprezentowałem na 16*2. Bez pomiaru temperatury, dosłownie kilka bajtów mniej bo to jest tylko odczyt i od razu wyświetlanie.

    Jeśli ktoś się czuje na siłach, to ja chętnie bym zobaczył programik pod to napisany w C, tam to mnożenie powinno jakoś się pomieścić. Nawet sterowanie wentylatorem może i by weszło, hmm na upartego dało by się zrobić taki PWM na wspólnym pinie wyświetlacza... działało by to w czasie mierzenia kiedy wyświetlacz nie jest i tak używany... problemem jest wspólne zasilanie przetwornika i procka, wszystkie śmieci z PWM szły by na ADC.

    Freddy - oczywiście że nie każdy wie jak się posługiwać eaglem czy innym narzędziem. Dla tego dodaje gotowce w PDF.

    Lucki - tutaj masz gotowca, wykorzystuje właśnie taki wyświetlacz https://www.elektroda.pl/rtvforum/topic620045.html
  • #26
    Mateusz31
    Level 11  
    Pokusiłem się o wykonanie miernika wg tego projektu. Przy okazji autorowi gratuluję pomysłowości. Miernik działa wyśmienicie, ale z wsadem TINY13LCD_9_ natomiast z drugim dokonującym 64 pomiarów jakby się wieszał, po podłączeniu napięcia generuje losowe wyniki pomiaru. Nie wiem co jest grane- czy może ktoś ze śledzących temat miał coś podobnego?
  • #27
    manekinen
    Level 29  
    Mateusz31 chyba jesteś pierwszą osobą która go wykonała ;) Napisz ile pokazuje gdy nie płynie żaden prąd i brak napiecia. Czy masz 0.00 czy może ten wynik się trochę wacha? Czy zdarza się że licznik się "przekręca" poniżej 0.00 i wchodzi na 9.99?

    Ten drugi program prawdę mówiąc napisałem o wiele później, na kolanie, i sprawdziłem tylko tak z grubsza - działał. W symulatorze działał ok, ale jeśli piszesz że coś jest nie tak to oczywiście rzucę okiem w wolnej chwili. Rozumiem że dysponujesz programatorem który radzi sobie z wyłączonym resetem?
  • #28
    Mateusz31
    Level 11  
    Więc wygląda to mniej więcej tak, ze bez napięcia jak i po podaniu około 5 v cały czas pokazuje 0.00. Natomiast temperatura jest przekłamana o około 1-2 stopnie w górę i nie reaguje na zmiany oraz za kazdym odłączeniem zasilania od miernika temp skacze o jakieś 0.1 stopni w górę lub w dół. W czasie wyłączania napięcia zasilającego z podanym napięciem 5 V na wejściu pomiarowym wyświetla 0.8 V. A czy mój programator poradzi sobie z odczytem kości z wyłączonym resetem to nie wiem bo jeszcze nie próbowałem jej zapisać innym wsadem. Miałem 2 klocki ;)
  • #29
    manekinen
    Level 29  
    Pytałem o ten działający program... jak się zachowuje. A Ty napisałeś o tym niedziałającym, ale dobrze, zobaczę może to jakaś literówka w programie, musze tylko skądś wydłubać attiny13 ;)

    A jeśli masz zwykły programator to reset możesz przywracać do życia za pomocą attiny fusebit doctor.
  • #30
    manekinen
    Level 29  
    Bawiłem się tym programem, znalazłem błąd za który przepraszam jeśli komuś narobiło to problemików :) W symulatorze kod działał bezbłędnie, a w rzeczywistości do wyświetlacza nie dochodziła komenda Upperline czego efektem były rozmaite latające cyfry po wyświetlaczu... głupia sprawa, bo przy komendzie Upperline nie przełączałem pinów jako wyjścia i wyświetlacz nic nie otrzymywał - w symulatorze to nie było do wykrycia, bo on tego niestety nie uwzględnia. Troszke to potrwało bo nie miałem na początku skąd wziąć T13, a potem zniechęciło mnie ciągłe przekładanie procka programator-układ-attiny doctor żeby odblokować reset-i znowu programator... Załączam przetestowany kod i pozdrawiam!