logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zasilić ATmega128 i Rf12b z akumulatora?

silvanjk 09 Mar 2010 12:13 3760 25
REKLAMA
  • #1 7804692
    silvanjk
    Poziom 12  
    Posty: 87
    Witam. Mam taki problem (jestem elektrykiem, a nie elektronikiem), mianowicie:

    Mam zbudować układ, oparty na ATmega128.
    Mają to być 2 płytki scalone (każda ze swoim uP), komunikujące się ze sobą za pomocą transmitera Rf1.2b (również po 1 sztuce na każdym scalaku).

    Nie wiem, jak zrobić zasilanie, wymogi są następujące:
    Jedna z nich ma być zasilana z portu USB komputera, przechodzącego w RS232 - i w konsekwencji podłączanego do omawianego scalaka (Scalak nr 1 = S1)

    Scalak 2 (S2) ma być zasilany z jakiegoś własnego źródła napięcia (bateria, akumulator). Z tego co zdążyłem wyczytać o ATmega128, to przy 16MHz jej zasilanie to przedział od 4.5 do 5.5V.

    Transmiter Rf12b (http://www.hoperf.com/rf_fsk/RF12B.htm) zasilanie ma od 2.2 - 3.8 V.

    Ma ktoś może jakieś pomysły, jak takie coś zorganizować?

    I jeszcze proszę o oszczędzenie mi żargonu - pewnie wiele nie zrozumiem ;)

    Z góry dziękuję.

    Ah, no i chciałem zapytać, czy w takich przypadkach, jak zasilanie nie z sieci, ale z USB/RS232, czy też z baterii wymagane są również jakieś filtry, czy stabilizatory?
  • REKLAMA
  • #2 7804761
    any56
    Poziom 39  
    Posty: 4186
    Pomógł: 656
    Ocena: 840
    Oczywiście!
    Przy zasilaniu z aku powinieneś zastosować stabilizator 5V (np. 7805).
  • #3 7804867
    nenpa8lo
    Poziom 17  
    Posty: 260
    Pomógł: 15
    Jeżeli urządzenie ma być przenośne to odradzał bym stabilizator ze względu na straty i zastąpił bym przetwornicą.
  • #4 7805122
    pagask
    Poziom 12  
    Posty: 16
    Pomógł: 1
    Ocena: 1
    użyć atmegi128L (jeżeli to 16MHz nie jest krytyczne) wtedy pójdzie na tym aku bez żadnych stabilizatorów
  • #5 7809701
    silvanjk
    Poziom 12  
    Posty: 87
    A jakieś schematy takich połączeń przy tych zasilaniach?
    Z baterii i RS232?

    Jak z filtrowaniem? Urządzenie ma pracować w towarzystwie silników indukcyjnych, a więc źródła pola el-mg.

    I jak podłączyć do tej części zasilanej z baterii, miernik cęgowy (a nawet 2 - na dwóch różnych fazach)?
    Zależnie od silnika prąd będzie od dziesiątych części ampera do kilkunastu, czy może nawet kilkudziesięciu A.
    Pewnie trzeba jakiś przetwornik A/C zastosować.
    Dane o wartości prądu mają być paczkami wysyłane przez tą jednostkę z akumulatorem, do tej jednostki podłączonej do komputera, a z niej - już bezpośrednio do kompa.
  • #6 7818645
    Kabuto15
    Poziom 19  
    Posty: 336
    Pomógł: 30
    Ocena: 5
    Jeśli chodzi o zasilanie i ew. stabilizację napięcia to możesz użyć jakieś przetworniczki STEP-UP. Z baterii np. litowo-jonowej (3.7V) będziesz zasilał bezpośrednio Rf12b, a z przetwornicy ATmegę. Napięcie z USB jest ok, jak dobrze zaprojektujesz płytkę, odfiltrujesz zasilanie to będzie działać ok przy silnikach etc.
    Co do pomiarów prądu i użycia przekładnika to musisz dostosować go do swoich potrzeb. Dla mniejszych prądów (do kilku amper) możesz pokusić się o wykorzystanie rezystorów pomiarów, ale dla dużych prądów musisz użyć przekładnika prądowego. Jeśli interesują Cię pomiary dla 50Hz to łatwo i tanio znajdziesz przekładnik, jeśli zaś interesują Cię pomiary w szerokim pasmie to tylko przetworniki LEM. Obecnie są takie nawet cuda jak LTS-8NP (8A), które zasilanie są z 5V a na wyjściu dają napięcie proporcjonalne do prądu od 2.5V (+/-0.625). Tyle, że ciężko Ci będzie mierzyć zarówno części amperów jak i kilkadziesiąt amperów (rozdzielczość przekładników). ATmega ma wbudowany przetwornik ADC więc nie ma problemu z przetwarzaniem na postać cyfrową.
  • REKLAMA
  • #7 7832409
    silvanjk
    Poziom 12  
    Posty: 87
    Chciałem dopytać jeszcze o kilka rzeczy.
    Jak chcę zrobić to zasilanie z USB. Tam są 2 piny przeznaczone do transmisji, a 2 to +5V i GND.
    Jak z tego zrobić przejście na RS232? Tam jest z kolei 9 pinów...
    I jak wyciągnąć na któryś z tych pinów te 5V? Potrzebuję je do zasilania układu, a tu:
    http://pl.wikipedia.org/wiki/RS-232
    w opisie nie widzę, aby któryś z pinów RS232 był wolny, lub przeznaczony na jakieś napięcie...
  • #8 7832548
    Kabuto15
    Poziom 19  
    Posty: 336
    Pomógł: 30
    Ocena: 5
    Nie da się łatwo przejść z USB na RS232. Najlepszy sposób zastosować układy z serii FT232 (BM, RL). W dokumentacji, którą znajdziesz zobaczysz jak można wykorzystać te +5V z USB do zasilania FT232 oraz ew. innych układów.
  • #9 7870026
    silvanjk
    Poziom 12  
    Posty: 87
    Co powinno się robić z wolnymi pinami uP, które pozostają nieużywane? Jeżeli robię mały projekcik, chwilowy, dosłownie, aby sprawdzić transmiter Rf12b, to czy muszę się wolnymi pinami przejmować?
    Jeśli tak, to którymi?
    Pozdrawiam.
  • #10 7870338
    _Robak_
    Poziom 33  
    Posty: 2209
    Pomógł: 231
    Ocena: 29
    Nie musisz się przejmować specjalnie, ale najlepiej jak ustawisz jako wejścia i podepniesz do masy.
  • #11 7870504
    silvanjk
    Poziom 12  
    Posty: 87
    A jak chciałbym podłączyć kilka przycisków do jakiegoś portu?
    Mam taki klasyczne przyciski, one mają 4 nóżki.
    Rozumiem, że port ustawiam jako wejście.
    Czy może być to zrealizowane tak, że:
    Od VCC, przez rezystor 22k do masy (tylko, że to ciągły pobór prądu) i dalej, po wciśnięciu przycisku (przed masą) zwieram to VCC przez rezystor do nóżki procesora?
    [img]
    https://obrazki.elektroda.pl/12_1269361234.jpg
    [/img]
  • #12 7870529
    _Robak_
    Poziom 33  
    Posty: 2209
    Pomógł: 231
    Ocena: 29
    Tak się tego nie robi, poczytaj na necie;) A jak już poczytasz to dojdziesz do tego dlaczego w AVRach przycisk daję się jedną stroną do pinu procesora a drugą do masy, uprzednio ustawiając pull up na pinie.
  • REKLAMA
  • #13 7870639
    silvanjk
    Poziom 12  
    Posty: 87
    Chodzi o to, że pin wewnątrz jest podłączony do VCC (czy jakiegoś tam innego napięcia) przez rezystor podciągający.
    Ten rezystor jest tylko po to, aby ograniczyć prąd?
    W takim razie, jeśli przycisk podłączony jest do masy, to po jego wciśnięciu na pinie będzie '0'?
    O to chodzi?
    Czyli procek traktuje 0 na wejściu, jako wciśnięcie przycisku?
    Po jego puszczeniu wraca nam stan wysoki?
  • Pomocny post
    #14 7870724
    _Robak_
    Poziom 33  
    Posty: 2209
    Pomógł: 231
    Ocena: 29
    Dokładnie tak jak piszesz;)
  • #15 7871102
    Konto nie istnieje
    Poziom 1  
  • #16 7871820
    rpal
    Poziom 27  
    Posty: 1502
    Pomógł: 72
    Ocena: 49
    atom1477 napisał:
    pagask napisał:
    użyć atmegi128L (jeżeli to 16MHz nie jest krytyczne) wtedy pójdzie na tym aku bez żadnych stabilizatorów

    Że co?

    a co się kolega atom tak dziwi może to jest wersja lampowa z zasilaniem napięciem stałym na poziomie 200V:)
  • #17 7872438
    Konto nie istnieje
    Poziom 1  
  • #18 7872782
    silvanjk
    Poziom 12  
    Posty: 87
    Aku ma być 3.7 V.
    Rf12b ma zasilanie chyba do 3.8V, a ATmega128L od 2.8V, więc stabilizator na 3V byłby chyba na miejscu?
  • #19 7872807
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #20 7876064
    silvanjk
    Poziom 12  
    Posty: 87
    Mam taki problem. Połączyłem sobie taką płytkę, ustawiłem portA ATmega16 jako wyjście, i daje on w stanie wysokim tylko 1.5V. Ktoś wie, dlaczego?
    Z tego, co wyczytałem w DS, powinno być min. 4.5V.
  • #21 7876524
    ShEvU_elektro
    Poziom 25  
    Posty: 995
    Pomógł: 26
    Ocena: 22
    daj prosze kod, to zobaczymy:)
  • #22 7876796
    silvanjk
    Poziom 12  
    Posty: 87
    Kod wygląda następująco:

    .include "m16def.inc"
    
    ldi R16, 0xFF
    out DDRA, R16
    
    ldi R16, 0b00000000
    out DDRD, R16
    
    
    
    ldi R16, 0x0F
    out PORTD, R16
    
    
    ldi R17, 0b00001011
    ldi R18, 0b00000000
    
    
    
    petla:
    
    
    Calosc:
    
    NieMa:
       out PORTA, R18
       sbic PIND, PIND5
    rjmp NieMa
    
    
    Jeest:
       out PORTA, R17
       sbis PINd, PINd5
    rjmp Jeest
    
    
    rjmp Calosc
    
    rjmp petla


    Co jest ciekawe, później się to zmieniło. Diody świeciły już jasno.
    Gorsze jest to, że mi w ogóle nie reaguje na rozkazy 'sbic' oraz 'sbis'. Mam JTAGICE, więc przy debugu widzę, że np. bez wciśnięcia klawisza pętla wykona się z 4 - 5 razy (powinna w nieskończoność) i przeskakuje dalej. Właściwie, to robi sobie co chce...

    Ah, no i wypada dorzucić schemat:
    Jak zasilić ATmega128 i Rf12b z akumulatora?


    Na płytce uniwersalnej, musiałem użyć wielu przewodów do połączeń (http://www.kamami.pl/published/publicdata/BTC10/attachments/SC/products_pictures/cab_a_red.jpg). Nie wiem, czy problemy nei wynikają właśnie z tego powodu...


    ---------------

    Powyższa kwestia rozwiązana...
    Zamiast:


    
    ldi R16, 0x0F
    out PORTD, R16


    powinno być:
    
    ldi R16, 0xFF
    out PORTD, R16
  • #23 7889435
    silvanjk
    Poziom 12  
    Posty: 87
    Pojawił się kolejny problem. Zlutowałem 2 płytki zgodnie z powyższym schematem (kilka postów wyżej).
    Jeden jest całkiem ok, wszystko elegancko, drugi po kilku programowaniach za pomocą JTAG'a zaczął wywalać błąd, który jest w poniższym rysunku w oknie dialogowym na dole:
    Jak zasilić ATmega128 i Rf12b z akumulatora?

    Chodzi o te ostrzeżenia od JTAGICE.

    -----------------------------------


    I z tym sobie poradziłem... Odłamał się lut przy pinie przy resecie.

    Mam inne pytanie. Przeszukałem trochę elektrodę, ale nie mogę znaleźć konkretnego tematu (inne dotyczyły gotowych generatorów czasowych), mianowicie:
    Chciałbym, aby coś się stało po pewnym czasie, przykładowo 1s - załóżmy, dioda zaświeci dopiero jedną sekundę po wciśnięciu klawisza. Albo zaświeci na 1 sekundę i zgaśnie.
    Taka pętla. Nie bardzo wiem, jak to zrobić.
    Z tego co zdążyłem się zorientować, to ważny jest czas trwania rozkazów. Przykładowo noop trwa 1 cykl zegarowy (chyba) co przy jednym MHz daje 1/1000000 s (tak mi się wydaje). Więc musiałbym zapętlić ten rozkaz milion razy, po czym powinno nastąpić wyjście z pętli. Ale jak to zliczyć?
    Pozdrawiam.
  • #24 7891946
    rpal
    Poziom 27  
    Posty: 1502
    Pomógł: 72
    Ocena: 49
    kolenia niech sprawdzi czy nie ma pozwieranych wyprowadzeń bo skoro powinno być 0 a jest 1,5 V to na to ewidentnie wskazuje. Najprędzej z piniem które pracuje jako wyjście i ma akurat logiczne 1 na wyjściu.
  • #25 7892998
    silvanjk
    Poziom 12  
    Posty: 87
    Dzięki, ale z tym sobie już poradziłem. Nie cały port miał włączone podciąganie (0F zamiast FF)...

    Wiesz może coś o tej pętli? Taki klasyczny pascalowy 'delay(1000);'

    Pozdrawiam.
  • #26 7955262
    silvanjk
    Poziom 12  
    Posty: 87
    Witam. Mam pytanie.
    Dotyczy assemblera, a mianowicie konkretnej komendy (czy raczej argumentu):
    Kod:
    
    ldi R16, (1<<ADEN) | (1<<ADIE) | (1<<ADPS2) | (ADPS1) | (1<<ADPS0) | (1<<ADATE)
    



    a<<b
    Wiem, że '<<' oznacza przesuwanie logiczne wartości 'a' o 'b' pozycji w lewo, zaś '|' to chyba po prostu OR, ale nie bardzo rozumiem sens tego i cel. Po co przesuwać jakaś wartość o ileś pozycji? Nie lepiej po prostu ustawić interesujący nas konkretny bit chcianą wartością? Poza tym co oznacza przesuwanie? W jakimś bajcie [7 6 5 4 3 2 1 0]... No właściwie nawet nie wiem, jak to powiedzieć. Skąd dokąd się coś przesuwa?
    Poza tym, jeżeli parametr 'b' jest np całym bajtem? To co wtedy?
    Już pomijam tego '|' ORa. Po co ten or? Do czego to?

    Może po prostu ktoś to wyjaśni prosto :) Może z jakimś dziecinnym przykładem... Trochę się z tym motam.

    Chodzi o dokumentację dla RF12b (Code). Tam jest co prawda używane C, ale kod wygląda podobnie, służy do ustawień Rf'a jako nadajnika lub odbiornika.
    To dość potrzebne, a nie bardzo to rozumiem...
    Tam wygląda to następująco:
    
    #define SEL_OUTPUT() DDR_SEL |= (1<<RFXX_SEL)
    #define HI_SEL() PORT_SEL|= (1<<RFXX_SEL)
    #define LOW_SEL() PORT_SEL&=~(1<<RFXX_SEL)
    #define SDI_OUTPUT() DDR_SDI |= (1<<RFXX_SDI)
    #define HI_SDI() PORT_SDI|= (1<<RFXX_SDI)
    #define LOW_SDI() PORT_SDI&=~(1<<RFXX_SDI)
    #define SDO_INPUT() DDR_SDO&= ~(1<<RFXX_SDO)
    


    Nie rozumiem za bardzo, co tu się dzieje... Pomijam już fakt, że to C...

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukuje sposobu zasilania układu opartego na ATmega128 oraz transmiterze Rf12b. Układ składa się z dwóch płytek scalonych, z których jedna ma być zasilana z portu USB, a druga z akumulatora. Wskazano, że ATmega128 wymaga napięcia od 4.5 do 5.5V przy 16MHz, natomiast Rf12b działa w zakresie 2.2 - 3.8V. Uczestnicy dyskusji sugerują użycie stabilizatora 5V (np. 7805) lub przetwornicy STEP-UP dla zasilania z akumulatora litowo-jonowego (3.7V). Wskazano również na możliwość zasilania ATmegi128L bez stabilizatorów, a także na potrzebę odpowiedniego filtrowania zasilania w obecności silników indukcyjnych. Użytkownik pyta o schematy połączeń oraz o sposób podłączenia do RS232, co prowadzi do rekomendacji użycia układów FT232 do konwersji USB na RS232. Dodatkowo poruszono kwestie dotyczące podłączania przycisków oraz pomiarów prądu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA