Skocz do zawartości

Płytka testowa do atmega8


Pomocna odpowiedź

Uparty jesteś ale (na razie) Ci nie odpuszczę.

Brawo za znalezienie rejestru ale.. powiedz mi tak szczerze: jak Ty to robisz? Powiedzmy, że potrzebujesz sterować 8 segmentami wyświetlacza. Czy przeszukujesz bibliotekę TTL w poszukiwaniu jakiegoś układu mającego z jednej strony kilka wejść a z drugiej 8 wyjść, wstawiasz jego symbol na schemat, zapodajesz go na Forum i dopisujesz kilka naiwnych pytań? Zanim zrobisz to następnym razem, przeczytaj jeszcze raz mojego poprzedniego posta, POMYŚL chwilę i zabierz się do roboty. Do roboty a nie nabijania licznika. Nikomu nie chwaląc się znajdź, ściągnij i przeczytaj dane katalogowe układu który masz zamiar użyć, niech będzie to 74164. Nawet jeżeli (jeszcze) nie rozumiesz tabelek z czasami i parametrami DC to na pewno znajdziesz wykresy pokazujące przebiegi sygnałów na wejściach i wyjściach lub tabelkę opisującą zmiany stanów układu w zależności od stanów/zmian wejść. Do tego nie trzeba przeglądać setek stron ani "podglądać różne schematy z neta". Zrób to samodzielnie a już zawsze będziesz wiedział jak to działa. Ten rejestr przesuwający to bardzo prosty układ, poradzisz sobie.

Przeczytałeś? Fajnie. Coś świta? Masz 4 wejścia a tak naprawdę 3, bo A i B się dublują. Wiesz już jakie sygnały tam trzeba wpuścić by rejestr "wciągał" dane? Super. Czyli potrzebujesz zegara i danych szeregowych. CLR może czasem się przydać ale zrobisz jak uważasz. Czyli zegar i dane. Czy jesteś w stanie wyobrazić sobie procedurę, która wysyła programowo bajt przez jeden bit któregoś portu procka i dodatkowo produkuje impuls zegara po każdym wysłanym bicie. Jesteś już prawie w domu. Coś Ci to przypomina? Tak, masz rację, mega8 ma już w sobie sprzętowy interfejs, który idealnie pasuje do zewnętrznego rejestru przesuwającego - SPI się nazywa. Znajdź rozdział w karcie procesora mega8 opisujący ten interfejs, zobacz z których nóżek korzysta i tam podłącz rejestr. Przecież obsługi m.in. SPI właśnie masz się na tej płytce nauczyć - zacznij już teraz. OK, czyli sprawa zamknięta? Nie do końca. Jedziemy dalej. Co zrobiłeś z punktami dziesiętnymi? Dlaczego tylko dwa są podłączone do rejestru a dwa dyndają w powietrzu? Nie chcesz ich wyświetlać? To dlaczego je nazwałeś DP1? Podłącz wszystkie DP razem i traktuj je jak ósmy segment wyświetlacza.

Teraz sprawa sterowania elektrod wspólnych. Gdzie się podziały tranzystory? Jeśli już je wrysujesz przejdź do próby symulacji tego kawałka - na razie w głowie. To bardzo prosty układ więc na pewno Ci się uda. Wyobraź sobie, że procesor wysłał już do rejestru obraz cyfry "0". Ponieważ wyświetlacz jest (czy rzeczywiście?) ze wspólną anodą, świecące segmenty muszą być zwierane do masy przez oporniki. Tak więc rejestr ma w sobie 8 bitów z czego 6 jest zerami a dwa (segment g i DP) są jedynkami. Żeby zapalić tę cyfrę na pierwszym wyświetalczu procesor powinien załączyć odpowiedni tranzystor pnp czyli wysłać mu 0 na bazę - oczywiście przez opornik. Cyfra "0" się zapala. Przez tranzystor płynie suma prądów wszystkich zapalonych segementów. Jaki masz wyświetlacz? Jeżeli dobry i jasny, każdy segement potrzebuje 5-10mA DC żeby ładnie dawać. Tutaj jednak masz multipleksowanie - każda cyfra będzie świeciła tylko 1/4 czasu. Żeby zachować jasność musisz teoretycznie zwiększyć prąd 4 razy. Na szczęście można skorzystać z pewnej fajnej cechy naszego oka i prąd zwiększyć tylko np. 2-3 razy. Robi się 30mA na segment. W najgorszym wypadku przez tranzystor popłynie więc 8*30=240mA. Czy to dużo? Raczej nie, musisz tylko zapewnić odpowiedni prąd bazy ale to już Twoje zadanie przy liczeniu opornika zakładając, że przy takich prądach kolektora wzmocnienie tranzystora może spaść np. do 50.

W przypadku wyświwetlacza ze wspólną katodą całość rozumowania się odwraca. Tym razem 74HC164 będzie musiał dostaczyć przez swoją nóżkę Vcc 240mA DO wyświetlacza a tranzystory npn będziesz załączał stanem wysokim.

Teraz druga strona, czyli segmenty. Wstawiłeś układ 74HC164. To bardzo fajna i popularna rodzina ale niestety ma jedną cechę - małe prądy wyjściowe. W danych katalogowych podają zwykle parametry wyjść dla prądów od uA do np. 5mA. U Ciebie ma płynąć 30mA - dużo więcej. Decydujesz się? A weź jeszcze pod uwagę, że w sumie przez nóżkę masy układu 164 będzie płynął cały prąd wyświetlacza czyli 240mA. O ile jedno wyjście jakoś pewnie by sie dało tak obciążyć, o tyle całość pewnie uszkodzi termicznie układ. W każdym razie takie projektowanie "po bandzie" to zły pomysł. Szukasz dalej? To dobrze. Pierwsze co przychodzi do głowy to 8 tranzystorów na wyjściach rejestru ale ludzie już sobie z tym poradzili inaczej. Jest wiele układów które mogą tu się nadać. Pierwszy z brzegu to rodzina Texasa TPIC6, np. TPIC6B595 - wygląda jak rejestr 74595 ale ma wyjścia open drain i prądy wyjściowe setek mA. Drugi to np. dedykowany do LED driver SCT2110 - też ma wejście szeregowe, ustawianie prądów LED jednym wspólnym opornikiem itd. Jeśli poszukasz, to sam na pewno coś fajnego znajdziesz choć trudno będzie wyczaić driver "od plusa" w przypadku wspólnej katody.

Koniec? Jeszcze chwilę. Wspomniałem o polaryzacji napięć na V+ i V- MAXa - rób wszystko dwa razy wolniej i pięć razy dokładniej. Każdy błąd tu na schemacie będzie kosztował Cię dużo więcej na "gotowej" płytce.

Wciąż nie poczytałeś o I2C. W normalnej wersji tego interfejsu i przy tak krótkiej magistrali oporniki podciągające 5-10k bedą OK.

Acha, i napisz tu na Forum proszę, jakie napięcie będzie na wejściu RESET procesora przed i po naciśnięciu klawiszka S2. Oczekuję odpowiedniej dla tego wyznania buźki.

  • Lubię! 1
Acha, i napisz tu na Forum proszę, jakie napięcie będzie na wejściu RESET procesora przed i po naciśnięciu klawiszka S2.

@Laik: ... dostałeś w tym poście odpowiedni link gdzie wszystko w tej sprawie jest wyjaśnione

Później piotr-89 pisał

2) Rezystor na Resecie powinien mieć wartość rzędu 4k7 - 10k

a ja uściśliłem:

2) Rezystor na Resecie powinien mieć wartość rzędu 4k7 - 10k

konkretne R2.

A Ty co zrobiłeś? Zamiast zmienić R2 z komentowanego schematu zmieniłeś R6.

... - czytaj wolniej, ale dokładnie, zarówno podpowiedzi jak i materiały z linków, które podajemy.

  • Pomogłeś! 1

Z tego co widzę porywam się z motyką na słońce :/ ale nic. będę teraz działał uważniej i powoli, do tego muszę nauczyć się trochę podstaw.

powiedz mi tak szczerze: jak Ty to robisz? Powiedzmy, że potrzebujesz sterować 8 segmentami wyświetlacza. Czy przeszukujesz bibliotekę TTL w poszukiwaniu jakiegoś układu mającego z jednej strony kilka wejść a z drugiej 8 wyjść, wstawiasz jego symbol na schemat, zapodajesz go na Forum i dopisujesz kilka naiwnych pytań?

Nie, w tym wypadku szukałem w sklepie elektonicznym w którym robię zakupy rejestru 8mio bitowego. I taki który znalazłem wyszukałem w eagle. Mój błąd, nie pomyślałem o prądach.

Koniec? Jeszcze chwilę. Wspomniałem o polaryzacji napięć na V+ i V- MAXa - rób wszystko dwa razy wolniej i pięć razy dokładniej. Każdy błąd tu na schemacie będzie kosztował Cię dużo więcej na "gotowej" płytce.
Faktycznie z pośpiechu i przyzwyczajenia że - kondensatora idzie do gnd przeoczyłem to że może być inaczej - dzięki 🙂

Co do czytania not i liczenia. Mam taki zapis w nocie atmega8 "DC Current per I/O Pin 40.0mA" Czyli na jeden pin mogę podać max 40mA tak? A więc licze tak przed wciśnięciem przycisku jest 5V opornik 330Ω a więc I=U/R -> I=5/330 = 0,015A - 15mA a po przyciśnięciu przycisku powinno być 0 ? Dobrze myślę.

A tak pozatym dziękuję za tak motywujące i wyczerpujące odpowiedzi. Zamiast dać odpowiedź naprowadzasz mnie jak ją wyszukać a to jest bardzo skuteczne a zarazem jestem bardziej samodzielny bo wiem już co i jak.

40mA??? A przeczytałeś tytuł tej tabelki? To są "Absolute Maximum Ratings" czyli wartości absolutnie nieprzekraczalne. Nawet myślenie o takich liczbach może Twój procesor zabić 😉 Te wartości są podawane do szybkiej oceny technologii w jakiej układ został zrobiony oraz do stwierdzenia, czy reguły i tolerancje projektowania jakie przyjąłeś podczas obliczeń nie zbliżają się niebezpiecznie do tych granic. A nie mają prawa! Musisz patrzeć na liczby w "DC characteristics", np. VOL, VOH - jeżeli chodzi o parametry portów wyjściowych. Dla przykładu (ATmega 8) jeżeli obciążysz port wypływającym prądem 20mA np. do diodki LED to zamiast 5V dostaniesz tylko 4.2V. Rozumiesz? Bardziej szczegółowe wykresy dot. portów są dalej.

Ale to tylko taka uwaga na marginesie bo... jak Ty to policzyłeś??? Przecież pin RESET to wejście. Wejście, wejście, czyli (z pewnym uproszczeniem) NIE pobiera prądu. Nie ma go w takim razie w obliczeniach - potem to być może zmienimy. A jeśli go nie ma, to zostaje tylko obwód:

+5V -> R18 -> węzeł do wejścia RESET -> S2 -> R19 -> GND

czyli typowy dzielnik napięcia, prawda? Umiesz go policzyć? Ufam, że tak bo jeśli nie, to rzeczywiście jest Ci potrzebna dobra motyka. Gdy S2 jest rozwarty, prąd od plusa nie płynie (bo i dokąd?), nie ma spadku napięcia na R18 i RESET dostaje pełne +5V. To na razie jest OK, ale to samo myśli w okolicach parteru gość spadający z 10 piętra. Gdy zewrzesz S2, z +5V płynie prąd przez dwa połączone rezystory I=5/(10330) czyli ok. 0.48mA. Jakie napięcie jest wtedy w węźle RESETu? Oczywiście takie jak spadek napięcia na R19: U=10000*0.000483 czyli ok. 4.8V. Czy obniżenie napięcia z +5 na 4.8V wyzeruje procesor? Czy to ma prawo działać??? Jeśli masz jakieś wątpliwości (wrrr...) to zajrzyj do wspomnianej już tabelki "DC characteristics", podpowiadam: napięcie VIL2 czyli maksymalne napięcie na wejściu RESET, jakie procesor uzna za stan niski (tj. wywołujący zerowanie). Ile tam stoi w kolumnie "max"? Nie słyszę! Ile? To teraz napisz tu zaraz jakie wybierasz wartości tych dwóch rezystorów (poparte obliczeniami), żeby obwód zerowania miał ręce i nogi.

  • Lubię! 2
Jeśli masz jakieś wątpliwości (wrrr...) to zajrzyj do wspomnianej już tabelki "DC characteristics", podpowiadam: napięcie VIL2 czyli maksymalne napięcie na wejściu RESET, jakie procesor uzna za stan niski (tj. wywołujący zerowanie). Ile tam stoi w kolumnie "max"? Nie słyszę! Ile?

0.2 VCC - i mam takie głupie pytanie czy to jest 0.2V czy 20% napięcia zasilającego (stawiam na to drugie ale mogę sie mylić.)

Wg noty min 0,5V max 20% z 5V - 1V

W każdym razie R18 10kΩ R19 1,5kΩ

I = 5V / 11500Ω ≈ 0,00043478A

Spadek napięcia na R19 - U = 1500Ω * 0,00043478A ≈ 0,65217V

A więc pasuje tak?

Ps. TPIC6B595 - gdzie znajde go w eagle albo skąd ściągne bibliotekę? (znalazłem TPIC6B56N wyprowadzenia ma te same i obudowę więc na schemat się nada prawda?)

Czy warto na płytkę dorzucić układ zegara czasu rzeczywistego ? Czy cos jeszcze co by się przydało w przyszłości ?

Jak podłączyć ten układ nie mam pojęcia. W nocie atmegi dotyczącej SPI pisze aby używać wyprowadzeń MOSI, MISO i SCK a w tym układzie są DI, D0, SCLR, SCK, RCK, G.

Dobrze kombinuję ?

0.2 VCC - i mam takie głupie pytanie czy to jest 0.2V czy 20% napięcia zasilającego (stawiam na to drugie ale mogę sie mylić.)

Dobrze kombinujesz 🙂

  • Pomogłeś! 1

0.2 VCC, a VCC to napięcie zasilania, jeśli masz 5V to jest po prostu 0.2 * 5V.

Już ci napisałem jak to ma być i dondu mnie zabije, ale jak sam stwierdził, kombinujesz dobrze, więc wyjaśniam tylko skąd to się bierze.

Już ci napisałem jak to ma być i dondu mnie zabije, ale jak sam stwierdził, kombinujesz dobrze, więc wyjaśniam tylko skąd to się bierze.

Oj, straszną mam opinię 🤣🤣🤣

Brawo Laik, odwaliłeś kawał dobrej roboty. Prawidłowo dobrałeś wartości rezystorów i uzyskane napięcie mieści się zakresie akceptowalnym przez procesor. Teraz tylko na chwilkę wróćmy "do korzeni" i przypomnij sobie, po co w ogóle zrobiłeś ten dzielnik. Koledzy już wcześniej zauważyli, że R19 zapobiega degradacji zestyków S2 podczas zwierania, bo to przez niego będzie rozładowywany C23. Początkowy prąd tego rozładowania to oczywiście Vcc/R19 czyli dla 1.5k wychodzi coś rzędu 3mA. Im rezystor będzie mniejszy, tym prąd będzie większy -> tym gorzej. Z drugiej strony na pewno podczas obliczeń sam zauważyłeś, że im większa wartość R19 tym większe napięcie RESETu po zwarciu S2 - też gorzej. Jaką wartość wybrać? Kieruj się zdrowym rozsądkiem. Spróbuj być z napięciem RESETu jak najbliżej zera i jednocześnie ochronić S2. Moim zdaniem "dolny" opornik rzędu 100R zupełnie wystarczy ale jeśli wstawisz swoje 1.5k też będzie OK.

W rzeczywistości (IMHO) problem jest trochę wydumany, bo prędzej znudzi Ci się ta płytka i zapragniesz mieć nową i lepszą niż popsuje się S2 a jeśli nawet, to raczej z powodu jego badziewnej jakości niż przełączanego prądu. W każdym razie masz tu posmak jakiegoś kompromisu, na które będziesz musiał jeszcze wielokrotnie iść chcąc świadomie projektować - właściwie cokolwiek 🙂

Zdecydowałeś się na 595? OK, czyli Ty szukasz wyświetlacza ze wspólna anodą(<- EDIT, oczywiście, że anodą) i pakujesz 4 tranzystory pnp a my czekamy na poprawiony i uzupełniony o cały blok wyświetlacza schemat.

Powodzenia 🙂

  • Lubię! 1

Czyli rejestr jest dobrze podłączony ?

Tranzystory 2N4403 ponieważ znalazłem je na TME, mają prąd kolektora 600mA co powinno całkowicie wystarczyć.

W rejestrze za mało jest miejsca na dwie kropki więc odpuszcze se jedną.

I jak ?

Przyjeżdżam do firmy, skuwam rower, zdejmuję kominiarkę, odpalam kompa a tu schemat leży. Właśnie tak to miało wyglądać 🙂 Rejestr podłączony do SPI, sterowanie anod z portów - OK. Jeszcze tylko drobny drobiazg związany z kropkami i sprawę "idei" mamy załatwioną. Punkty dziesiętne (chyba sie powtarzam..) traktuj jak zwykły, ósmy segment wyświetlacza. Ktoś tu zrobił trochę niefortunny symbol z kropkami wyprowadzonymi od dołu ale możesz je wszystkie 4 połączyć razem i dopiąć do wyjścia Q7. Oczywiście kolejność podłączania segmentów jest zupełnie dowolna i na pewno będziesz jeszcze modyfikować schemat w trakcie robienia projektu płytki bo i tak, i tak musisz samodzielnie ułożyć "generator znaków" czyli tablicę w programie zawierającą obrazy wszystkich symboli, jakie chcesz pokazywać. W tej tablicy bit odpowiadający za "segment" punktu dziesiętnego będzie zawsze zerem a to funkcja załączająca kolejne wyświetlacze będzie dodawała jedynkę tam, gdzie akurat kropka/kropki ma/mają się świecić.

Dlatego napisałem o idei, bo chciałbym jeszcze zatrzymać się chwilę na stronie praktycznej. Jeśli będziesz wykorzystywać tę płytkę jako sterownik różnych dziwnych rzeczy - na co wskazują wyciągnięte na złącza porty to zauważ, że o ile rejestr nie wnosi specjalnych obciążeń na sygnały SPI i można o nim zapomnieć, o tyle tranzystory stanowią istotny dodatek. Jeżeli kiedyś przyjdzie Ci do głowy wykorzystać np. komparator analogowy (piny AINx), to oporniki 330 podłączone do plusa przez złącza B-E tranzystorów będą dużym i zupełnie zbędnym obciążeniem. To samo z pozostałymi dwoma sygnałami - raczej nie będą co prawda analogowe, ale źródło sygnału cyfrowego też będzie zmagać się z dużym prądem wpływającym od plusa. Może warto dać sobie szansę jakiegoś bezbolesnego odcinania tych 4 sygnałów np. za pomocą szeregowych zworek. Jeśli już je wstawisz, to bazy tranzystorów zostaną "osierocone" i przydałyby się im jakieś rezystory podciągające (zaraz za zworką) które upewnią Cię, że żaden tranzystor się nie włączy gdy tego nie chcesz. Tu wystarczą wartości rzędu 22k-100k do plusa.

I jeszcze tylko słowo o MAX232. To bardzo wygodny układ , bo sam robi sobie zasilanie nadajników a napięcia +/-12V zawsze były zmorą systemów z RS232. Jeśli przyjrzysz się bliżej jego konstrukcji wewnętrznej to zauważysz, że bazuje ona na tzw. pompie ładunku. To taki fajny, "bezcewkowy" pomysł, który przy pomocy przełączanych szybko kondensatorów "pompuje" ich ładunek z szyny zasilania +5V najpierw do +10V a potem do -10V. Aby to zrobić trzeba dość często podłączać rozładowany wcześniej kondensator (jeden z tych 1uF) do Vcc. Żaden inny układ tu użyty nie robi tak dużego (energetycznie) obciążenia impulsowego i warto z tego powodu zablokować zasilanie MAXa (tuż przy nim) dodatkową pojemnością, conajmniej kilka uF równolegle ze 100n. Warto, żeby to z niej właśnie czerpał energię dla swojej pompy ładunku niż z odległych (być może) kondensatorów zasilacza. Istnieje też wersja 202, której wystarczają kondensatory 100nF - czasem warto oszczędzić trochę miejsca. Tam blokowanie zasilania załatwia 100 lub 220nF.

Tak mi jeszcze przyszło do głowy, że podłączając drugi identyczny rejestr szeregowo za tym istniejącym miałbyś "za darmo", bez starty ani jednego wyprowadzenia procesora aż 8 całkiem silnych wyjść do sterowania diodami LED, przekaźnikami czy cokolwiek bądź.

Ogólnie jestem pod wrażeniem 🙂 Oby tak dalej.

  • Lubię! 1

Bardzo dziękuję za pomoc przy płytce 🙂 Wiele się dzięki Tobie nauczyłem jak projektować obwody, co i gdzie szukać. Naprawdę takich ludzi jak Ty trzeba ze świecą szukać 🙂

Co jeszcze poleciłbyś dodać do płytki aby była wystarczająca do podstawowej nauki programowania ? Jaki kwarc użyć aby był najodpowiedniejszy 16MHz czy lepiej zegarkowy? Czy może dodać RTC do układu ?

W planach mam jeszcze dodanie potencjometru 10k, diody RGB oraz wyświetlacza alfanumerycznego 2x16. I myślę że płytka będzie naprawdę w porządku 🙂

Ok nic nie dodaje, najwyżej później będę dodawał modułami. Moduł wyświetlacza zrobię oddzielnie ponieważ przyda mi się do pierwszego projektu. Schemat wygląda tak:

Czy jest ktoś może na forum kto pomógł by mi zrobić płytkę 1 warstwową?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...