Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'avr'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 248 wyników

  1. Cześć, mógłby mi ktoś wytłumaczyć w jaki sposób można przekształcić jeden typ zmiennej na drugi? Konkretnie chodzi mi tutaj o przypadek przerobienia int na string/char abym mógł wyświetlić zawartość takiej zmiennej na wyświetlaczu LCD.
  2. Witam próbuje zrobić proste menu ale zajmuje za dużo pamięci SRAM, dlatego postanowiłem umieścić je w pamięci FLSAH mikrokontroler, niestety nie dział to poprawnie mianowicie nie wyświetla nic albo po kolei wszystkie znaki (krzaki) bez przerwy. kod : const char T1[] PROGMEM = {"DS1307"}; const char T2[] PROGMEM = {"TESTER"}; const char * menu[2] PROGMEM = {T1, T2}; //odczytuje za pomocą: LCD_Write_Text((char *) pgm_read_word_near(& menu[1])); // funkcja wyświetlania bo może tu jest problem void LCD_Write_Text(uint8_t * Text){ while(* Text) Send_Data(* Text++); } dodam że po skasowaniu wszystkich "PROGMEM", a do funkcji wyświetlania wpisania po prostu "menu[0]" działa bez zarzutu. i jeszcze podkreśla mi "pgm........" i wyskakuje problem "nieznana nazwa rejestru r0". Gdzie popełniam błąd. Z góry dzięki za odpowiedz.
  3. Witam. Mam problem z zaprogramowaniem uC ATmega328P-PU za pomocą programatora USB AVR v2.1 - microUSB 3,3V/5V - Pololu 3172. uC podłączyłem za pomocą interfejsu ISP według poniższego schematu: Mój system operacyjny to kali-linux 2020.2. Po podłączeniu programatora system widzi go jako port: /dev/ttyACM0 Problem pojawia się przy próbie wgrania programu, po wpisaniu w konsoli komendy: avrdude -p m328p -P /dev/ttyACM0 -c avrisp -U flash:w:main.hex avrdude zwraca w konsoli błąd: avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00 avrdude done. Thank you. Przeszukiwałem 2 dni internet w poszukiwaniu rozwiązania i niczego sensownego nie znalazłem. Nie mam nawet pomysłu co może być nie tak, ani jak sprawdzić co może być przyczyną. Ktoś może wie jak mi pomóc? Może coś źle zrobiłem albo uC jest nie sprawny?
  4. Cześć, przymierzam się do projektu inteligentnego domu, mam w głowie zarys planu tego co chcę osiągnąć, ale ze względu na niewielkie doświadczenie z elektroniką będę bardzo wdzięczny za wszelkie rady i sugestie. Ogólna koncepcja jest taka: Serwer na Raspberry Pi zbierający dane z czujników i wysyłający komendy do elementów wykonawczych. Czujniki i elementy wykonawcze rozproszone po całym mieszkaniu (i poza nim ) W pierwszej kolejności chciałbym zacząć od kilku prostych czujników i łączenia się do nich z mojego komputera (na razie bez serwera na malince). Myślałem o tym żeby czujniki wyposażać w esp8266 i łączyć się do nich po HTTP. W przyszłości, jak powstałby serwer na Raspberry Pi, to mógłby odpytywać czujniki i zbierać dane. Jeśli chodzi o zasilanie czujników to myślałem o zasilaniu bateryjnym/akumulatorowym. Tu pojawia się pierwszy problem, bo słyszałem, że esp potrzebuje dość sporo energii do zasilania. Myślicie, że taki układ ma prawo działać przez dłuższy czas? A może zamiast esp powinienem spróbować czegoś innego? Z góry dzięki za wszystkie rady
  5. Cześć. Zdarza mi się popełnić jakiś układ, który wykonuję samodzielnie - trawienie, lutowanie, programowanie itp. Hobbystycznie - dla siebie, ewentualnie coś dla znajomych. Zwykle korzystam z uC AVR, ale ostatnio bawię się płytkami Nucleo od STM. Powoli myślę o przesiadce z THT na SMT. I tu pojawia się pytanie - w jaki sposób programować takie mikrokontrolery? Mam w domu jakieś przejściówki z QFP na DIP, ale to wymaga przylutowania, zaprogramowania, odlutowania i przylutowania na gotowej płytce. Trochę mnie taki proces przeraża. Chciałem zakupić taki adapter z klipsem, ale okazuje się, że to uzależnia mnie zarówno od danej wielkości układu (QFP48, QPT64 itd.), jak i rozstawu nóżek (np. 0.8 mm dla AVR i 0.5 mm dla STM32). Znalazłem też takie igły-sondy z wysuwanymi szczypcami do chwytania nóżek, ale czy to mi chwyci 0.5 mm bez zwierania sąsiednich nóżek??? Czy jest jakieś w miarę uniwersalne rozwiązanie, które pozwoli mi na programowanie układów SMD o różnym rastrze, a przynajmniej różnej liczbie nóżek? Takie dedykowane adaptery są dość drogie (ok. 60 zł zwykły i ok. 300 zł z wyprowadzeniami JTAG/SWD i USART) i nie chciałbym kupować kilku, by móc używać różnych uC. Czy pozostaje mi wlutowywanie na docelowej płytce pinów do programowania? Używając SMD chciałbym przede wszystkim uniknąć wiercenia w płytce i zająć jak najmniej miejsca na niej, a takie piny trochę mi się z tym kłócą. Jakie rozwiązanie polecacie dla mnie? I drugie - poboczne pytanie: jak najlepiej/najłatwiej programować gołe scalaki z STM32, jeśli posiadam programatory z płytek Nucleo-64 i Nucleo-144?
  6. Płytka prototypowa AVR Witam mam dla was do zaprezentowana płytkę prototypową z mikrokontrolerem AVR w obudowie DIP40. Zaprezentowany układ został wykonany dla osób zaczynających zabawę z mikrokontrolerami AVR. Płytka PCB ma wymiary 132mm x 69mm. Został wykonany w programie KiCad. Schemat umieszczony poniżej składa się z Płytki dwuwarstwowej Mikrokontrolera AVR DIP40 Wyświetlacza 7-segmentowego Wyświetlacza LCD HD44780 Dwóch mostków H w jednej obudowie 5 przycisków przycisków 1. Obok mikrokontrolera są umieszczone jego wyprowadzenia. Do obu wyświetlaczy wyprowadzenia umieściłem obok goldpinów Portu A dla LCD oraz Portu C dla 7-segmentowego (odpowiedzialnego za załączenie segmentów) Umożliwia to łatwe połączenie używając zworek. Każdy podłączony układ ma doprowadzone zasilanie. 2. Mikrokontroler AVR – Płytka przystosowana jest do mikrokontrolerów AVR w obudowie DIP40. Nie wyposażyłem układ w programator. Lecz zastosowałem złącze ISP 10-pinowe. Programator to koszt ok 20 pln. Podłączyłem do układu zewnętrzny rezonator kwarcowy w obudowie HC-49 przy montażu należy pamiętać o przylutowaniu adaptera. Daje to możliwość zamiany taktowania procka. 3. Wyświetlacz 7-segmentowy jest to element ze wspólną anodą Jest to układ który ma już wyprowadzone i połączone segmenty i anody poszczególnych cyfr. Do obsługi wyświetlacza wykorzystywane są piny wyprowadzone przy Porcie C (segmenty) oraz obok wyświetlacza (Anody). Segmenty posiadają również rezystory 220 Ω. Można również zastosować wyświetlacz ze wspólną katodą ale należy pamiętać o tym pisząc program. 4. Wyświetlacz LCD HD44780 nie występuje on w prezentowanym układzie ma on wyprowadzenia na PCB. Jest możliwa jedynie komunikacja 4-bitowa, która oszczędza na ilości potrzebnych połączeń między mikrokontrolerem a ekranem. Wykorzystać można wiele rozmiarów wyświetlaczy. Najczęstszym jest 1602 który posiada dwa wiersze oraz 16 kolumn. Czyli 32znaki. Jest też możliwość podłączenia ekranu 2004 i zależność kolumn i wierszy jest identyczna jak w opisywanym wcześniej ekranie. Pod ekranem jest miejsce na zworkę RW która odpowiada za komunikacje zwrotną z LCD do mikrokontrolera. Nie korzystając z tej opcji należy przełączyć pomiędzy RW a GND. Obok zworki RW jest miejsce na przylutowanie potencjometru do ustawienia kontrastu. 5. Mostek H jest to element do pełnej obsługi silników. Układ L293D jest w obudowie DIP 16. Układ ten pozwala sterować w pełni (prędkość, kierunek obrotów) dwoma silnikami DC. Można również podłączyć opisywany układ do silnika krokowego bipolarnego. Dzięki wyprowadzeniom można wykorzystać zewnętrzne napięcie przystosowane do danego silnika. W każdym z silników możemy decydować o prędkości obrotowej wykorzystując złącze PWM oraz kierunkiem przy użyciu wejść 1A, 2A lub 3A, 4A (np. 1A Vcc , 2A GND -> obroty w prawo) 6. Ostatnim opisywanymi elementami są przyciski. Są one podjęte a stałe do GND a drugie końce wyprowadzeń są podłączone do złączy goldpinowych. Projekty które można zrealizować na omawianym PCB Migotanie diodami LED (należy pamiętać o podłączeniu co najmniej jednego wyprowadzenia Anod do GND) Sterowaniem Wyświetlaczem LED 7 segmentowym (multipleksacja) Obsługa wyświetlacza LCD Sterowanie silnikami DC w wykorzystaniem PWM Sterowanie silnikiem krokowym bipolarnym obsługa klawiszy (sprawdzenie stanu na pinie) Obecny układ jest pierwszą wersją po której nastąpią poprawki. W kolejnych etapach rozwoju chciałbym dodać osobne diody LED podpięte na stałe do 5V lub GND wraz z rezystorami. Dołączyć dwa moduły jednym jest ekspander pinów pracujący na magistrali TWI (I2C) oraz moduł termometru cyfrowego DS18B20 połączonego za pomocą komunikacji 1-wire. Poprawić układ PCB (układ ścieżek, wymianę obudów na inne). Zachęcam do zadawania pytań, pisania sugestii oraz krytyki w celu dalszego rozwoju. W załączniku dołączam plik rar z wszystkimi plikami KiCad'a.Board 1.rar Pozdrawiam
  7. Cześć po przejrzeniu szafy mam do sprzedania sporo książek o elektronice, programowaniu w języku C, mikrokontrolerach AVR, PIC itp Odbiór osobisty w Gdańsku lub wysyłka do paczkomatu za 10 zł. Przy większej liczbie kupionych książek proszę pisać na PRIV zrobię rabat Mikrokontrolery AVR niezbędnik programisty - Jarosław Doliński - STAN: Jak nowa - CENA: 12 zł - Link Mikrokontrolery AVR. Programowanie w języku C - przykłady zastosowań - Andrzej Witkowski - STAN: Jak nowa - CENA: 20 zł -Link Mikrokontrolery PIC w praktycznych zastosowaniach - Paweł Borkowski - STAN: Jak nowa - CENA: 30 zł - Link Mikrokontrolery AVR ATmega w praktyce - Rafał Baranowski - STAN: Jak nowa - CENA: 40 zł - Link Elektronika dla bystrzaków. Wydanie II - Cathleen Shamieh, Gordon McComb - STAN: Jak nowa - CENA: 14 zł - Link Wyświetlacze graficzne i alfanumeryczne w systemach mikroprocesorowych - Rafał Baranowski - STAN: Jak nowa - CENA: 40 zł - Link Mikrokontrolery AVR ATtiny w praktyce - Rafał Baranowski - STAN: Jak nowa - CENA: 45 zł - Link Mikrokontrolery dla początkujących - Piotr Górecki - STAN: Jak nowa - CENA: 45 zł - Link Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. - Tomasz Francuz - STAN: Jak nowa - CENA: 39 zł - Link Teoria mechanizmów i manipulatorów - Józef Knapczyk, Adam Morecki - STAN: Jak nowa - CENA: 25 zł Moduły GSM w systemach mikroprocesorowych - Jacek Bogusz - STAN: Jak nowa - CENA: 45 zł - Link Teoria obwodów elektrycznych Zadania - Stanisław Bolkowski, Wiesław Brociek, Henryk Rawa - STAN: Stan dobry - CENA: 25 zł - Link Podstawy przemian energetycznych - Jacek Marecki - STAN: Stan dobry - CENA: 12 zł - Link
  8. Witam. Chciałbym w programie z przerwaniem uzyskać następujący efekt żeby nie używać delaya: 1. Wywołuję przerwanie przyciskiem 2. W przerwaniu jest odmierzany czas przez Timer w Atmega8 i po np. 1 sekundzie przerwanie się kończy i przechodzi do programu głównego. Rozumiem że należy umieścić przerwanie wewnętrzne w zewnętrznym. Jak napiszę 2 przerwania pod sobą, pod programem głównym to po odpaleniu qC to co 1 s. będzie się włączało i wyłączało? Jak to ogarnąć już w kodzie takim jak poniżej bo gdzieś trzeba ten timer przerwania (np. TIMER1_OVF_vect) umieścić. Dziękuję z góry:) #include <stdio.h> #include <avr/interrupt.h> #define SWITCH (1<<PD3) int main(void) { //inicjalizacja przerwania - przycisk MCUCR |= (1<<ISC10); GICR |= (1<<INT1); //Timer1 TCCR1B |= (1 << WGM12); TCCR1B |= (1 << CS12); OCR1A = 31250; TIMSK |= (1 << OCIE1A); DDRD &= ~(SWITCH); PORTD |= (SWITCH); sei(); while (1) { } //kod programu } ISR(INT1_vect) { while(1) { //kod programu w przerwaniu } }
  9. Witam, mam problem z modułami BT HC05, chcę zrobic dwa urządzenia typu master i slave z mastera będę przesyłał znak + (kod ascii to chyba 43) ten drugi odbierze ten znak i zmieni stan diody. Proste urządzenie zeby poduczyc się w tym zakresie. Oczywiście juz na starcie mam sporo problemów jednym z nich jest tak jakby brak komuniakcji między modułami. Znaczy niby dioda za parowanie jest załączona albo jak połacze się laptopem i przez termianl wysle to mi odbeirze i zmieni stan diody. Przesyłam kod bilioteki z Bluebooka M. Kardasia Master char bufor[100]; // bufor roboczy #define LED_TOG PORTC ^= LED_PIN #define LED_PIN (1<<PC0) #define BUZ (1<<PB0) #define BUZ_PORT PORTB #define BUZ_DIR DDRB #define BUZ_OFF BUZ_PORT &= ~BUZ #define BUZ_ON BUZ_PORT |= BUZ #define BEEP BUZ_ON; _delay_ms(5); BUZ_OFF char znak; int main( void ){ DDRA |= (1<<PA7); // ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE PORTA |= (1<<PA7); // załączamy podświetlenie LCD - stan wysoki // inicjalizacja buzzera BUZ_DIR |= BUZ; BUZ_OFF; DDRC |= LED_PIN; // kierunek pinu PC7 – wyjściowy PORTC |= LED_PIN; // wyłączenie diody LED suart_init(); lcd_init(); lcd_str( "HC_05 MASTER" ); while (1){ // if (klawisz_wcisniety()) { suart_puts( "49" ); LED_TOG; // BEEP; _delay_ms(1000); } // odsyłamy z powrotem do terminala cały odebrany string suart_puts( bufor ); suart_puts( "\r\n" ); lcd_cls(); // wyświetlamy na ekranie LCD odebrany string z terminala lcd_str( bufor ); } i Slave #include "SoftUART/soft_uart.h" char bufor[100]; // bufor roboczy #define LED1_TOG PORTC ^= LED1_PIN #define LED1_PIN (1<<PC0) int main( void ) { DDRA |= (1<<PA7); // ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE PORTA |= (1<<PA7); // załączamy podświetlenie LCD - stan wysoki // inicjalizacja soft uart'a suart_init(); DDRC |= LED1_PIN; PORTC|= LED1_PIN; lcd_init(); lcd_str( "slave" ); char znak; while ( 1 ) { // odbieramy string z terminala (funkcja blokująca) suart_gets( bufor, sizeof( bufor ) ); znak = sgetchar(); if( znak == 43) LED1_TOG; // odsyłamy z powrotem do terminala cały odebrany string suart_puts( bufor ); suart_puts( "\r\n" ); lcd_cls(); // wyświetlamy na ekranie LCD odebrany string z terminala lcd_str( bufor ); } }
  10. Witam, przedstawiam autonomicznego robota balansującego. Robot balansujący na Atmega 1284P 20MHz. Obsługuje komunikację oraz zmianę wsadu za pomocą bluetooth. Ponadto istnieje możliwość sterowania robotem za pomocą pilota IR, oraz zmiany nastawów regulatorów. Posiada system autonomicznej jazdy z wykorzystaniem 3 sensorów ultradźwiękowych. Delikatne ruchy robota w stanie spoczynku spowodowane są dużymi luzami w przekładniach silników. Robot radzi sobie bez problemów ze średniej wielkości nachyleniami podłoża. Sterowanie odbywa się poprzez aplikację na system android, która to wyświetla także podstawowe informacje o robocie (napięcie baterii, wielkość całki w regulatorze pochylenia itp). Tryb autonomicznej jazdy opiera się o trzy ultradźwiękowe czujniki odległości. W oparciu o ich wskazania, robot samoistnie podejmuje decyzje co do dalszej drogi. Jest to ostateczna wersja robota która posiada także prócz trybu autonomicznego, tryb zdalnego sterowania na odległość do 100 metrów. Zaimplementowany moduł auto diagnozy potrafi wykryć 32 ostrzeżenia i błędy, np od niskiego napięcia 12v 5v, po jego niestabilność, uślizg kół, luzy na piastach, opory toczenia i przekładni... itp.... itd... Uruchomienie poszczególnych funkcji robota odbywa się poprzez komendy terminala uart, lub wygodniej pilot ir. Wszystkie parametry robota wyświetlane są na 5 pulpitach 4 wierszowego wyświetlacza lub uproszczone w dedykowanej aplikacji na system android. __________ Komentarz dodany przez: Treker Witam na forum, następnym razem proszę pamiętać o zdjęciu w formie załącznika, które widoczne będzie później w katalogu robotów oraz na stronie głównej. W tym przypadku już poprawiłem
  11. Witam, Po inicjacji Timera, ADC przestaje działać. Przed, oraz w trakcie inicjacji wszystko działa jak należy, co sprawdziłem pułapkami programowymi w postaci funkcji LED() (na piny ADC0-2 podpięte są przez przyciski dzielniki napięć które na wyjściu dają połowę napięcia). Wszystko przestaje działać po włączeniu przerwania Compare Match Timera 1. Początkowo myślałem, że problem tkwi w tym, że program wychodząc z jednego przerwania wchodzi od razu w drugie, jednak dioda po zainicjowanym timerze wciąż świeci połową jasności, po prostu już nie gaśnie. Czy przerwania ADC i timera się w jakiś sposób gryzą? Lub ma ktoś jakiś inny pomysł w czym może tkwić problem? Kod: #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/atomic.h> #include <util/delay.h> volatile int adc; volatile int MUX_tmp; volatile char adc_arr[3]; void ADC_init(void) { ADMUX|= ( _BV(REFS0) ); ADCSRA|= ( _BV(ADEN) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0)); DIDR0 |= 0x3F; } void LED(void) { while(adc<=300) { PORTB|=_BV(PB0); PORTB=0; } while(adc>=500){}; PORTB=0; } void Timer_init(void) { TCCR0A|= (_BV(COM0A1) | _BV(COM0B1) | _BV(WGM00) | _BV(WGM01)); LED(); _delay_ms(32); TCCR0B|= (_BV(CS00)); LED(); _delay_ms(32); TCCR1B|= (_BV(WGM12) | _BV(CS10)); LED(); _delay_ms(32); OCR1AH|= 0b1001000; LED(); _delay_ms(32); TIMSK1|= _BV(OCIE1A); LED(); _delay_ms(32); } ISR(ADC_vect) { adc=ADC; MUX_tmp=ADMUX & 0xF; adc_arr[MUX_tmp]=adc; if(MUX_tmp <= 3) { ADMUX=(MUX_tmp+1) | _BV(REFS0); MUX_tmp= ADMUX & 0xF; } else { ADMUX=_BV(REFS0); } ADCSRA|= _BV(ADSC); } volatile int Flag=0; ISR(TIMER1_COMPA_vect) { Flag=1; } int main(void) { sei(); ADC_init(); ADCSRA|= _BV(ADSC); DDRB|= _BV(PB0); LED(); _delay_ms(32); LED(); _delay_ms(32); Timer_init(); LED(); _delay_ms(32); while(1); { LED(); _delay_ms(32); } } Nie widzę potrzeby w wrzucaniu schematu, do PB0 podłączona jest dioda, do pinów ADC wspomniałem wcześniej a reszta mikrokontrolera podłączona jest prawidłowo. Z góry dziękuję za odpowiedź Pozdrawiam Ps: Jest to wycinek programu, więc niektóre zmienne mogą zdawać się bezużyteczne (jak np int Flag)
  12. Projekt ten powstał, aby rozwiązać problem dotyczący braku możliwości oglądania kanałów TV z serwisu Ipla na telewizorze. Głównym celem tego projektu było stworzenie urządzenia wraz z interfejsem, który po podłączeniu do TV pozwoli na szybkie i wygodne oglądanie kanałów TV z serwisu Ipla. W skład urządzenia wchodzi mini komputer Zotac ZBOX B1324 oraz zestaw uruchomieniowy Atnel ATB 1.05a, natomiast oprogramowanie zostało napisane w języku Java oraz C. Czym właściwie jest AVR-IplaTV-Box? AVR-IplaTV-Box jest urządzeniem, które pozwala na oglądanie kanałów TV z serwisu Ipla.tv na telewizorze. Dodatkowo urządzenie wyposażone jest w odbiornik IR, który jest odpowiedzialny za obsługę zmiany kanałów za pomocą zwykłego pilota wyposażone w nadajnik podczerwieni IR. Co właściwie potrafi robić to urządzenie? AVR-IplaTV-Box pozwala w bardzo szybki oraz wygodny sposób na oglądanie oraz zarządzenie kanałami TV z serwisu Ipla za pomocą tego samego pilota, którego używamy do obsługi telewizora. Główne funkcjonalności jakie zostały przeze mnie zaimplementowane w tym projekcie to: zamiana kanałów TV, zatrzymywanie oraz wznawianie transmisji, dwustopniowe przewijanie kanałów (10 sekund lub 5 minut) w tył i przód, regulacja poziomu jasności, automatyczne logowanie do konta Ipla, pełna kontrola urządzenia za pomocą pilota od telewizora, wyświetlanie informacji odnośnie aktualnie emitowanego programu - nazwa oraz krótki opis, wyświetlanie aktualnego paska postępu dla wszystkich programów, łatwa konfiguracja aplikacji za pomocą pliku application.properties, możliwość edytowania dostępnych kanałów TV za pomocą pliku channels.json, możliwość wyłączenia urządzenia z poziomu pilota. Poniżej zamieszczam krótki filmik prezentujący wyżej wymienione funkcjonalności. Skąd wzięła się potrzeba stworzenia takiego urządzenia? Obecnie serwis Ipla TV pozwala na zakup pakietów z kanałami TV (Discovery, Polsat itd.), które można oglądać za pośrednictwem serwisu Ipla TV lub aplikacji na Anroida i iOS. Niestety nie ma możliwości oglądania kanałów TV w aplikacji Ipla na Smart TV, co oznacza że do oglądania kanałów TV jest wymagany komputer lub smartphone. Kontaktowałem się nawet w tej sprawie z pomocą techniczną Ipla, lecz powiedzieli mi, że nie planują w najbliższym czasie wyprowadzenia kanałów TV na smart TV (pewnie wynika to ze sposobu szyfrowania danych - DRM). Wygoda przede wszystkim! Jednym z głównych założeń projektu było, aby całe urządzenie można obsługiwać w taki sam sposób, jak zwykły telewizor. Co wiązało się z koniecznością stworzenia dodatkowego interfejsu, który pozwoliłby na sterowanie urządzeniem za pomocą pilota od telewizora. W tym calu zastosowałem zestawy uruchomieniowy (ewaluacyjny) Atnel ATB 1.05a, wyposażony w m.in. mikrokontroler Atmega 32A oraz odbiornik podczerwieni TSOP31236. Do obsługi odbiornika podczerwieni po stronie mikrokontrolera wykorzystałem bibliotekę IR_UNI autorstwa Mirosława Kardaśa, która była dołączona do książki Język C Pasja programowania mikrokontrolerów 8 - bitowych. Dodatkowo zestaw ten jest wyposażony w układ FT232RL, który pozwala na komunikację z komputerem za pomocą interfejsu USB. Informacje odnośnie aktualnie emitowanego programu pozyskiwane są z serwisu Ipla, a następnie parsowane po stronie aplikacji za pomocą biblioteki JSoup. Oprogramowanie Kod aplikacji desktopowej znajduje się na moim GitHub'ie i każdy może się z nim zapoznać klikając w ten link: AVR-Ipla-TV-Box Jeśli ktoś będzie miał jakieś pytania dotyczące tego projektu to zachęcam do ich zadawania w komentarzu oraz do zapoznania się z dokładniejszym opisem tego projektu na moim blogu, gdzie jest nawet sekcja dla developera, gdzie dokładnie opisuje zastosowane technologie oraz całe flow programu Pełen opis projektu wraz z kodami źródłowymi dostępny jest tutaj: DevTomek.pl -> AVR-IplaTV-Box, czyli Ipla TV na Twoim telewizorze! PS. Nie wiem, czy projekt ten spełnia ogólne założenia działu DIY na tym forum dlatego nie kopiowałem zbyt wiele treści z mojego wpisu na blogu, gdyby jednak okazało się że projekt ten jest wart dokładniejszego opisu to mogę dodać więcej informacji w tym poście dot. tego urządzenia
  13. Witajcie. Mam do zaprezentowania mój nowy projekt. Zdalnie sterowany robot kroczący z odbiornikiem podczerwieni. Jednostką centralną jest mikrokontroler ATmega8A-PU. Robot porusza się dzięki trzem serwomechanizmom TowerPro SG90. Inspiracją do sposobu chodzenia był robot kroczący Pololu. Robot posiada 6 niebieskich diod. Ich katody są połączone z odpowiednimi pinami mikrokontrolera, dzięki czemu steruję nimi w zależności od wykonywanego ruchu robota. Anody są połączone przez rezystor z nogami robota, te natomiast są połączone z potencjałem dodatnim zasilania. Jako pilota używam telefonu z androidem wraz z aplikacją RCoid. Korzystam ze standardu RC5. Kierunkami poruszania się robota są przód, tył, obracanie w lewo i prawo. Do zatrzymania robota służy dowolna inna komenda. Sterowanie serwomechanizmów odbywa się dzięki programowo stworzonemu PWM na 8 bitowym timerze mikrokontrolera. Tak wygląda kod przerwania od przepełnienia timera: ISR(TIMER0_OVF_vect) { static uint16_t cnt; if(cnt>=r) PORTC &= ~(1<<PC3); else PORTC |= (1<<PC3); if(cnt>=m) PORTC &= ~(1<<PC4); else PORTC |= (1<<PC4); if(cnt>=l) PORTC &= ~(1<<PC5); else PORTC |= (1<<PC5); cnt++; if(cnt>625) cnt = 0; } Zmienne r m i l odpowiadają za położenie poszczególnych nóg zmieniane w pętli głównej programu. Ich zakres mieści się od 17-76 (0.5ms-2.5ms) (0°-180°). Oczywiście zakres pracy jest mniejszy. Dla przykładu dobranymi wartościami dla nogi środkowej są 42 przy oparciu na lewej części, 44 pozycja środkowa, 46 oparcie na prawej części nogi. Zmienna licznika cnt jest porównywana z wartością 625, dzięki czemu uzyskuję częstotliwość 50Hz (8000000Hz/1/256/625=50Hz [20ms] [prescaler=1]). Jeżeli chodzi o kwestie zasilania to zdecydowałem się na użycie czterech zwykłych baterii AAA dających na wyjściu ~6V co zmusiło mnie do użycia przetwornicy Pololu S7V7F5 do zasilania mikrokontrolera. Diody i serwomechanizmy są zasilane bezpośrednio z baterii. Nogi zostały wygięte ze stalowego drutu o średnicy 1.5mm. Do orczyków zostały przymocowane za pomocą stalowego drutu o średnicy 0.3mm. Koniec każdej nogi zalałem gorącym klejem tak, aby zapobiec ślizganiu się robota na gładkiej powierzchni. Lista elementów: mikrokontroler ATmega8A-PU 3x serwomechanizmy TowerPro SG90 przetwornica Pololu S7V7F5 odbiornik podczerwieni TSOP31236 6x diody niebieskie rezonator kwarcowy 8MHz trytki i rurki termokurczliwe druty stalowe o średnicy 1.5mm, oraz 0.3mm płytka stykowa 170 otworów 4x baterie AAA z koszykiem parę rezystorów, kondensatorów i przewodów Zapraszam do śmiałego pisania swoich pytań, opinii i uwag Pozdrawiam, Karol
  14. LiPol Charger v1.0 / v2.0 Szanowni czytelnicy forum w tym krótkim artykule przedstawię Wam projekt ładowarki do akumulatorów litowo-polimerowych 2 celowych (7,4V). Prace nad projektem rozpoczęły się bardzo dawno temu, co można było śledzić w tym wątku. Dużą rolę w trakcie projektowania samego układu odegrał kolega @marek1707. Tak naprawdę ostateczna forma pierwszej wersji ładowarki została bardzo mocno zasugerowana przez niego dzięki temu działa ona niezawodnie. Układy zostały zaprojektowane wedle następujących założeń: możliwość ładowania akumulatorów 2 celowych przy pomocy źródła zasilania o napięciu 5V i natężeniu prądu nie większym niż 1A (na tyle pozwalały zastosowane elementy elektroniczne) oraz ładowanie z wykorzystaniem 2 paneli słonecznych 6V/300mA, które aktualnie miałem pod ręką - stąd zastosowano układ przetwornicy typu boost, zastosowanie przewodowej lub bezprzewodowej komunikacji z komputerem PC, wykorzystanie diod LED do sygnalizacji stanów pracy ładowarki, (v2.0) wyświetlanie informacji na wyświetlaczu alfanumerycznym 2x16, (v2.0) dodanie przycisków do ręcznej interakcji użytkownika z urządzeniem, (v2.0) wbudowanie prototypu prostego balansera ogniw, (v2.0) wyprowadzenie padów do programowej kalibracji przetwornika ADC. LiPol charger v1.0 Wersja pierwsza ładowarki jest wersją niekombinowaną oraz dość niezawodną. Pełny cykl ładowania akumulatora obejmuje zarówno fazę CC (stałoprądową) oraz CV (stałonapięciową). Cykl ten świetnie obrazuje WYKRES, który podrzucił mi kolega @marek1707 i który zapamiętam do końca swojego życia Zasadę działania przetwornicy boost wydaje mi się, że każdy elektronik powinien znać. Jeśli jednak czytelniku nie miałeś okazji zapoznać się z tym rodzajem przetwornic podsyłam ciekawe artykuły na ten temat: LINK, LINK. W skrócie - na wejściu przetwornica otrzymuje napięcie maksymalne 6V oraz prąd maksymalny 1A. Sygnał PWM generowany przez mikrokontroler ze stałą częstotliwością, a zmiennym wypełnieniem otwiera lub zamyka tranzystor kluczujący przetwornicę, który dzięki temu reguluje napięcie lub prąd wyjściowy przetwornicy w zależności od fazy algorytmu ładowania CC/CV. Zastosowano w tym celu najzwyklejszy regulator proporcjonalny. Mikrokontroler ma możliwość pomiaru potrzebnych parametrów tj. napięcia i prądy wejściowe/wyjściowe oraz napięcie międzyogniwowe. Napięcia są mierzone poprzez dzielniki napięciowe natomiast pomiar prądów odbywa się z wykorzystaniem układów bocznikowych. Komunikacja z komputerem odbywa się poprzez moduł Bluetooth (BTM222 lub HC-05) lub z wykorzystaniem przejściówki USB-UART. Dodatkowo domowymi metodami wykonałem shield umożliwiający podłączenie wyświetlacza alfanumerycznego 2x16. Ostatecznie wykorzystując źródło napięcia stałego 5V/1A udało się uzyskać przetwornicę o sprawności ok. 65%. Całkiem niezły wynik jak na prototyp. Straty mocy są związane ze stratami na diodzie, indukcyjności oraz NIE zastosowaniu kondensatorów typu Low ESR. Wszystkie te parametry można jeszcze trochę poprawić przez co możliwe jest zwiększenie sprawności samej przetwornicy. Wykorzystanie do ładowania paneli słonecznych zmusiło do zastosowania najprostszego algorytmu MPPT - śledzenia punktu maksymalnej mocy. Panele słoneczne połączone są równolegle przez co uzyskano większy prąd wejściowy na przetwornicę. W tym połączeniu maksymalny prąd wejściowy wynosi 600 mA dla posiadanych przeze mnie paneli 6V/300mA. Biorąc pod uwagę to, że w polskich warunkach z tych paneli jestem w stanie wyciągnąć maksymalnie 70-80% całkowitej sprawności przy bezchmurnej pogodzie prąd ładowania akumulatorów jest niewielki. Dlatego ten tryb ładowania sprawdza się raczej przy niewielkich akumulatorach. Ale najważniejsze, że się sprawdza LiPol charger v2.0 Druga wersja ładowarki nie została jeszcze przetestowana!!! Natomiast wzbogaciłem ją o kilka praktycznych dodatków, których brakowało mi w poprzedniej wersji. Wersja v2.0 została wzbogacona o prototyp balansera złożonego z dwóch oporników dużej mocy oraz tranzystorów sterowanych z poziomu mikrokontrolera, który na podstawie pomiaru napięcia międzyogniwowego decyduje o tym, który obwód „strat mocy” załączyć. Jeśli któryś z tranzystorów zostaje otwarty, przez rezystor przepływa prąd, natomiast ładowanie danego ogniwa akumulatora jest pomijane. Dzięki temu możliwe jest wyrównanie poziomów napięć na obu ogniwach. Dodatkowo wyprowadzone zostały pady pomiarowe, które znacznie ułatwiają kalibrację odczytów z przetwornika ADC. Wbudowano również konwerter USB-UART na podstawie chipu FT230XQ, wyprowadzono również piny Rx i Tx w celu podłączenia np. modułu Bluetooth. W tym projekcie udało się znacząco zmniejszyć wymiary ładowarki. Kompletne schematy obu wersji ładowarki udostępniam w pdf’ach poniżej. LiPolCharger_v1_0.pdf LiPolCharger_v2_0.pdf Wykaz ważniejszych elementów wykorzystanych w układach ładowarek: mikrokontroler ATmega32 tranzystor kluczujący MOSFET-N STS12NF30L driver MOSFET MCP1402T cewka 220 uH wzmacniacze operacyjne LM358 wyświetlacz alfanumeryczny 2x16 konwerter USB-UART FT230XQ, tranzystory bipolarne NPN i PNP dowolne, pod warunkiem, że maksymalny prąd kolektor-emiter będzie większy niż 1A. Jeśli ktoś z czytelników będzie zainteresowany tematem owych ładowarek serdecznie zapraszam do zadawania pytań w komentarzach, a także ewentualnego krytykowania (oczywiście konstruktywnego) mojego projektu.
  15. Mam pytanie o pomiar napięcia ujemnego w atmedze. Silnik szczotkowy po odłączeniu zasilania jeszcze chwilę się kręci siłą bezwładności , jeśli w tym momencie zmierzymy napięcie na zaciskach to otrzymamy jakąś wartość z znakiem + lub -, dopiero gdy silnik się zatrzyma wartość zmierzona będzie zero. Jak mierzyć to napięcie przy pomocy ADC z atmegi? Napięcie z przedziału minimum -20/+20v, najlepiej -50/+50(DC). wiem że najpierw musi iść dzielnik napięcia żeby dostosować napięcie mierzone do zakresu przetwornika Chcę mierzyć tą metodą czy silnik się obraca bądź nie, więc interesuje mnie rejon w okolicy 0V. Jakie rozwiązanie będzie tutaj lepsze w/w układ na rezystorach czy układ z wzmacniaczem operacyjnym.
  16. Tak jakoś niedawno przyczepiła się do mnie myśl: zrób jakąś mini-gierkę na ATtiny85. Jako że myśl się odczepić nie chciała, w końcu gierka powstała. Wybrałem uproszczoną wersję Tappera - choćby dlatego, że zrobienie kolejnego klona Tetris czy Pacmana to nie jest (przynajmniej moim zdaniem) specjalnie trudne zadanie, a przy Tapperze trzeba było rozwiązać parę dość ciekawych problemów. I tak z części znalezionych w szufladzie powstał "BARMAN". Nie ma co prawda muzyki (ale to żadna strata, wygrywanie Buffalo Gals na brzęczyku piezo przez fałszującego conieco ATtiny nikomu chyba nie sprawiłoby przyjemności oprócz kogoś totalnie pozbawionego słuchu muzycznego), nie ma eskalacji trudności ani intermediów, nie ma nawet zapisu wyników do EEPROM-u. Obudowa również nie jest specjalnie udana (czytaj: tak dokładnie spaprana że wstyd mi STL-e pokazać). Najważniejsze jednak, że da się w to grać Tak więc nie publikuję tego aby się chwalić, ale ponieważ obiecałem w innym wątku że pokażę jeśli coś mi wyjdzie - poza tym gra mimo nawet tak uproszczonej grafiki jest całkiem grywalna, więc być może komuś się będzie chciało spróbować odtworzyć to ustrojstwo. Wygląda to tak (niestety, nie udało mi się złapać ostrości na komórce): W akcji można to obejrzeć tutaj: Kody - jeśli kogoś interesują - są na githubie. Prosiłbym tylko o niekomentowanie kodu, wiem że nie jest to mistrzostwo programowania w C, ale wystarczy do ,ewentualnego odtworzenia sobie gry i pogrania. Schemat... no cóż, dużo tam nie ma, ale przynajmniej można podpatrzeć rozwiązanie podłączenia analogowego joysticka i dwóch dodatkowych klawiszy do ATtiny Wykaz części: ATtiny85 Membrana piezo (użyłem 27mm, mniejsza będzie lepsza) Rezystory 10k, 22k i 33k Joystick PSP 1000 (jest w Botlandzie) Wyświetlacz 128x64 OLED na I2C (SH1106) Bateria CR2032 Trzy microswitche Obudowa co prawda mi nie wyszła (dlatego - jak wspomniałem STL-i nie ma i nie będzie), ale chciałbym przynajmniej pokazać co mi się nie podoba: Teoretycznie trzyczęściowa obudowa (nie liczę tu pierścienia dociskowego membrany, który jest wydrukowany oddzielnie wyłącznie z przyczyn technicznych) powinna być OK... Skręcona czterema śrubkami M2, z gniazdem na baterię (zależało mi na tym, aby nie można było włożyć baterii odwrotnie) i otworami dla membrany nawet zdaje egzamin... Jak widać każdy element ma swoje miejsce - joystick siedzi w gniazdku, wyświetlacz również ma swoje ustalone miejsce, środkowa część utrzymuje pod sobą płytki (taka szumna nazwa, w rzeczywistości kawałki płytki uniwersalnej z dolutowanymi od spodu przewodami)... co ja chcę? Ano, okazało się, że założenie górnej części obudowy to wyższa szkoła ekwilibrystyki, wyświetlacz i joystick siedzą sobie z lekkim luzem i jak by tego nie odwrócić - albo one wypadają z gniazdek, albo wysypują się klawisze... dałem sobie radę gdzieś za piątą próbą, a i tak musiałem wydrukować dłuższe klawisze żeby najdrobniejsze przechylenie obudowy nie powodowało ich spaceru na podłogę... Zrobienie tego na oddzielnych mini-płytkach wydawało się całkiem niezłym pomysłem - dopóki się nie okazało, że wszystkie przewody które miałem albo są za wiotkie i dolutowanie ich pod spodem płytki nie wystarczy aby uchronić je przed zerwaniem - albo za sztywne. Wybrałem sztywniejsze (kynar), upchnięcie tego wszystkiego w obudowie to męka bo zawsze coś wyskakiwało. Podejrzewam, że wystarczyłoby umieścić na jednej płytce mikrokontroler oraz dwa klawisze (reset i lewy fire), wtedy nie przeszkadzałyby zbyt sztywne przewody. I to by było na tyle. W razie jakichkolwiek pytań jestem do dyspozycji PS. Nie jestem pewien czy nie machnąłem się w schemacie ale dopadło mnie zapalenie spojówek (kochane słoneczko) i niespecjalnie widzę co ja tam namalowałem
  17. Witam, tym razem chciałbym zaprezentować mojego najmniejszego do tej pory robocika klasy Nanosumo. Nazywa się „Mały”. W zasadzie wszystko w tym projekcie jest małe: µkontroler, akumulator, silniki, czujniki. Jedną wielką rzeczą była radość podczas pierwszej walki z kartonikiem, gdy to wszystko zadziałało. Idea zbudowania robota zrodziła się kilka lat temu. Od tego czasu trwało zbieranie odpowiednich elementów i informacji. Sama konstrukcja powstawała krótko, bo około 2 tygodnie. Robot mieści się w pudełku o wymiarach 15mm*15mm*15mm. Napędzany jest dwoma silnikami z wibracji Nokii 3310. Przekładnie wyjęte z małych serwomechanizmów. Sterownik silników MPC17C724 znajduje się na dwustronnej płytce PCB umieszczonej między kołami. Akumulator Li-pol 3,7V o pojemności 50mAh w zupełności wystarcza na 20min pracy. Mikrokontroler ATMEGA8L w obudowie MLF znajduje się na głównej płycie PCB pod akumulatorem. Taktowany jest z zewnętrznego generatora 12MHz, aby umożliwić programowanie, z wykorzystaniem bootloadera bezpośrednio z portu USB. Dzięki takiemu rozwiązaniu złącze programatora ma tylko 3 piny. Od spodu na przednim silniku umieszczone są 2 czujniki linii KTIR0711S. Musiały być odpowiednio zeszlifowane, aby szczelina między podłożem i czujnikami była większa od 0,9mm. Dalmierz oparty o APDS-9700 oraz HSDL-9100 idealnie nadawał się do tego robota. Największy problem podczas budowy sprawiło zablokowanie µkontrolera. Niezbędne było użycie Rezurektora AVR. Dzięki odpowiedniemu przygotowaniu innych problemów prawie nie było.
  18. Miniaturowy Tetris z pięcioma przyciskami, głośniczkiem Piezo i ekranem Oled 128×64. To wszystko przy zaledwie sześciu dostępnych GPIO jednodolarowego Digisparka/ATtiny85. Moja wersja kodu dodaje kilka ulepszeń, które znacząco zmieniają odbiór całej gry (opisane niżej), a koszt budowy całego zestawu wynosi około 15 zł. ATtiny Tetris Gold Multi Button obsługuje narastający poziom trudności (przyspieszanie opadania wraz z usuwaniem kolejnych linii), informację o klocku pojawiającym się w kolejnej turze, podpowiedź o pozycji klocka w dolnej partii planszy, pełną pseudo-losowość doboru klocków, dźwięki i temat muzyczny z oryginalnej gry. Poniżej mój filmik prezentujący ten układ w działaniu: W filmie można zobaczyć krótkie urywki z rozgrywki, proces instalacji szkicu w urządzeniu oraz pełny, pięciominutowy gameplay. Sprzęt Jakiś czas temu zainteresowały mnie klasyczne gry retro dla ATtiny85, ale w repo Attiny-Arduino-Games wszystkie były zaledwie dwu-przyciskowe. Tetris wymagał nieco więcej logiki, ale i tak obsługiwało się go przez naciskanie lub przytrzymywanie jednego z tylko dwóch przycisków, co generowało błędy i nie było zbyt wygodne. Z czasem jednak pojawiła się w repo wersja Tetris Multi Button, w której rozwiązano ten problem wykorzystując odpowiednią kombinację rezystorów i przycisków, dzięki czemu podłączono trzy przyciski pod jeden pin mikrokontrolera. Nie posiadam czystego ATtiny85, ale miałem na stanie Digisparka z tym chipem i postanowiłem złożyć to urządzenie. To chyba pierwsze nagranie wideo takiego zestawu - w sieci brak w sieci brak filmów i opisów wykonania pełnej, pięcio-przyciskowej wersji. Żeby się nie pogubić podczas montażu , korzystając z rozpiski pinów Digisparka i ATtiny85 przeniosłem dostarczony ze sketchem poniższy schemat: na lekko chaotyczną wersję graficzną dla stykowej płytki prototypowej i Digisparka zasilanego baterią 9V: a przy okazji też dla czystego ATtiny85 zasilanego baterią 3V: Poszczególne przyciski odpowiadają za: start nowej gry lub restart aktualnie rozgrywanej, włączenie/wyłączenie układu, obrót, przyspieszenie opadania, przesunięcie w lewo, przesunięcie w prawo. Przytrzymanie przycisku opadania i włączenie restartu gry aktywuje tryb ducha, a przytrzymanie przycisku opadania razem z przyciskiem obrotu podczas restartu ustawia trudny poziom gry, wypełniając dodatkowo błędnie klockami część planszy. Po aktywacji tych opcji grę należy uruchomić przyciskiem przyspieszonego opadania. Wersja na czystym ATtiny85 potrzebuje tylko 3V, bo sketch jest pisany dla obniżonego do 8MHz taktowania zegara. Wersję dla Digisparka zasilam poprzez pin VIN 9V baterią i przy takim poborze wystarczy jej na baaardzo długo. Wymagane do działania 5V przenoszę dodatkowym, pustym goldpinem na lewą stronę płytki prototypowej za pomocą dziesięciocentymetrowego przewodu połączeniowego żeńsko-męskiego. Po zlutowaniu powyższego układu w połączeniu z gołym ATtiny85 i po ubraniu go w miniaturowy brelok do kluczy, koszt (bez baterii) zamknąłby się poniżej 15 złotych. Na Aliexpress ATtiny85 kosztuje 0,80$, ekran Oled 128×64 1.80$, mały piezo buzzer 0,17$, a reszta części to już koszty groszowe. Tym sposobem otrzymujemy pełną grę sterowaną w identyczny sposób, jak w wielkich automatach Arcade lata temu, a do tego zasilaną malutką baterią 3V. Do zestawu zamiast białego ekranu można wybrać ekran niebieski lub żółto-niebieski, ale ponieważ ten ostatni jest dzielony na dwie różne części z odstępem, to nie prezentuje się zbyt atrakcyjnie (co widać na powyższym filmie) i polecam jednokolorowy odpowiednik. Potencjalny brelok mógłby wyglądać tak, jak na obrazku poniżej: Kod Zmiany w kodzie, których dokonałem, nie są duże, ale znaczące w odbiorze gry. Poniżej różnice między moją wersją, dostępną na GitHubie, a oryginałem gry dla ATtiny85: Dodałem losowość doboru klocków – domyślnie ATtiny Tetris generuje tę samą sekwencję klocków w każdej nowej grze, bo użyta funkcja random korzysta w kółko z tej samej tablicy liczb losowych. Programiści nie aktywowali randomSeed, ponieważ wszystkie piny w układzie są już podłączone. Moja wersja przesuwa tablicę liczb pseudo-losowych po każdym rozpoczęciu gry inkrementując seed do EEPROMu i aktywując w ten sposób pełną pseudolosowość doboru klocków (powtarzają się tylko pierwsze dwa). Grając w oryginalną wersję, do piątej linii miałem już ustalony optymalny schemat położenia klocków, przez co gra stawała się nudna. Teraz jest już poprawnie i mam świadomość, że wykorzystanie EEPROMu w randomSeedowaniu ograniczy liczbę rozgrywek do zaledwie 99000 (podana liczba uwzględnia już obecny w kodzie zapis najlepszych wyników również do EEPROMu). Na starcie gry dodałem fragment tematu muzycznego z oryginalnej gry Tetris z 1986 roku – domyślnie brak jakiejkolwiek muzyki w grze. Po wybraniu trybu ducha temat muzyczny jest nieco dłuższy. Dodałem dźwięk opadającego klocka (tylko podczas swobodnego spadania) oraz inny dźwięk dla klocka, który kończy opadanie. Domyślnie dźwięki w tej grze pojawiają się sporadycznie – tylko podczas usunięcia pełnej linii klocków oraz na zakończenie gry. Naprawiłem część błędnie wyświetlanych fontów na ekranie startowym Domyślnie wyłączyłem tryb ducha, który wyświetla podpowiedź o docelowej pozycji klocka. Tryb ducha można aktywować sposobem opisanym powyżej pod konfiguracją przycisków. Ze swoimi zmianami musiałem się zmieścić w sześciu procentach wolnej pamięci. Obecnie pozostaje już tylko 1% wolnego Projekcik jest dość interesujący i co najważniejsze, w pełni użyteczny, więc możliwe, że znajdą się osoby chcące zbudować taki układzik. Jako dodatek zamieszczam więc proces instalacji. Instalacja Kod zabiera blisko 100% pamięci ATtiny85, więc na Digisparku nie mieści się bootloader i nie można uploadować sketcha poprzez USB – należy więc skompilować hexa i wgrać go za pomocą programatora ISP. Jako programatora użyłem Arduino wg poniższego schematu: Na Arduino trzeba wgrać dostępny w przykładach Arduino IDE sketch ArduinoISP. Aby poprawnie skompilować tę wersję dla Digisparka należy w Arduino IDE zastąpić dodatkowy adres URL dla menadżera płytek od Digistump JSONem dla czystego ATtiny85, a następnie wybrać płytkę ATtiny25/45/85, procesor ATtiny85, zegar Internal 8MHz. Następnie z menu szkic eksportować skompilowany program, który zostanie wtedy umieszczony w katalogu źródła sketcha. Na koniec zostaje już tylko wgranie hexa na Digisparka poprzez Arduino programem avrdude. Poniżej przykładowe polecenie kopiujące (z fusami) wykonane na macOS, ale w innych systemach wygląda podobnie: /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -P/dev/cu.usbmodem14101 -b19200 -Uflash:w:/Users/username/Documents/ATtiny-Tetris-Gold/ATtiny-Tetris-Gold.ino.tiny8.hex -U lfuse:w:0xF1:m -U hfuse:w:0xD5:m -U efuse:w:0xFE:m Jak przebiega taki proces można obejrzeć na końcu powyższego filmiku. Poniżej też zdjęcie "programatora" i układu obok siebie. W filmie i na zdjęciach do włączania układu korzystam z przełącznika suwakowego SS22T25, ale lepiej sprawdził się przełącznik prosty ESP1010. Napięcia na przyciskach są istotne i podczas gry trzeba uważać aby nie dotykać rezystorów Ten problem wyeliminuje się po zlutowaniu układu. Najlepszy wynik gry jest również zapisywany w EEPROMie. Ponieważ głośniczek jest podłączony do pierwszego pinu Digisparka, to dodatkowo otrzymujemy LEDowe sygnały świetlne w momencie odtwarzania dźwięków. Po zakończeniu gry Tetris natychmiast przechodzi w tryb uśpienia z minimalnym poborem prądu, jednak do Digisparka dodałem przełącznik włączający/wyłączający zasilanie dla układu – wersja opierająca się wyłącznie na ATtiny85 nie wymaga wykonania tego kroku. Gra chodzi bardzo płynnie, co widać na powyższym filmie, gdy przytrzymuję przycisk przyspieszonego opadania dla kilku klocków pod rząd. Miniaturowy ATtiny Tetris Gold jest bardzo regrywalny (nie nudzi się) i to niesamowite, że udało się go upchnąć na tanim ATtiny85 przy zachowaniu tak dużej funkcjonalności. Serdecznie polecam montaż tego prostego układu. Powiększenia układów i trochę więcej informacji można znaleźć na moim blogu: http://jm.iq.pl/tetris
  19. Cześć wszystkim. Mam problem z rezonatorem kwarcowym na płytce stykowej -- w momencie podpięcia go przez kondensatory 22 pF do masy, urządzenie nie jest rozpoznawane i avrdude wyświetla mi błąd (Mega1284). Jak tylko odłączę go od masy to urządzenie da się normalnie zaprogramować choć nie jestem pewien czy wszystko działa, ponieważ nie mogę przeprowadzić poprawnej transmisji UART (błędy w ramce danych, program jest dobry bo przez chwilę działał na ATMedze328p -- sprawdzane analizatorem logicznym.) Nie zamieszczam schematu podłączenia, ponieważ jest dobre -- na płytce lutowanej w której pracował mikrokontroler wszystko działa przy takim samym podłączeniu (kwarc połączony z masą). Zastanawia mnie też czy problemem może być sam kwarc. Zawsze używałem takich z oznaczeniem np. 16.000 itp. natomiast ten którego używam obecnie ma oznaczenie R160LEB8w Z góry dzięki za odpowiedzi. PS: Odpowiedź avrdude przy poprawnej transmisji. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e9706 (probably m1284) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "asdf1.hex" avrdude: writing flash (184 bytes): Writing | ################################################## | 100% 0.08s avrdude: 184 bytes of flash written avrdude: verifying flash memory against asdf1.hex: avrdude: load data flash data from input file asdf1.hex: avrdude: input file asdf1.hex contains 184 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.08s avrdude: verifying ... avrdude: 184 bytes of flash verified avrdude: safemode: Fuses OK (E:FF, H:99, L:F7) avrdude done. Thank you. Kod programu: /*Przek dompilacją należy zdefinować wartości BAUD Rate */ #include <avr/io.h> #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 void UART_Init( unsigned int ubrr); void UART_Transmit(unsigned char data); int main(void) { char i = '5'; UART_Init(MYUBRR); UART_Transmit(i); while(1) ; return 0; } void UART_Init( unsigned int ubrr) { /*Set baud rate */ UBRR0H = (unsigned char)(ubrr>>8); UBRR0L = (unsigned char)ubrr; /*Enable receiver and transmitter */ UCSR0B = (1<<RXEN0)|(1<<TXEN0); /* Set frame format: 8data, 2stop bit */ UCSR0C = (1<<USBS0)|(3<<UCSZ00); } void UART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSR0A & (1<<UDRE0)) ) ; /* Put data into buffer, sends the data */ UDR0 = data; } Wynik z analizatora stanów -- BAUD ustawiony na 9600 tak jak w programie:
  20. Witam, umieszczam schemat mojego pierwszego Line Followera opartego na mikroprocesorze. Zdecydowałem się na rozwiązania najczęściej wykorzystywane w innych konstrukcjach tego typu przez początkujących: - ATmega328 - Pakiet LiPol 2S 7,4V - TB6612 (po jednym na każdy silnik) - Zasilanie silników bezpośrednio z pakietu - Stabilizator LM1117 dla logiki - 7 czujników KTIR0711S Schemat płytki głównej: Schemat płytki z czujnikami: Byłbym wdzięczny za przejrzenie schematu, czy nie popełniłem jakiegoś błędu przy połączeniach.
  21. Witam, mam problem może i prosty do rozwiązania ale ja go akurat nie widzę. Chodzi mi kod do zliczania impulsów z silnika krokowego bipolarnego, przysyłam wam mój program w którym chce własnie taki licznik w którym będzie wyświetlał mi na lcd ilosc kroków czyli impulsów. #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/pgmspace.h> #include "LCD/lcd44780.h" #include "MK_ENCODER2/mkencoder.h" #define BUZ (1<<PB0) #define BUZ_OFF PORTB &= ~BUZ #define BUZ_ON PORTB|= BUZ #define BEEP BUZ_ON; _delay_ms(5); BUZ_OFF #define BEEP1 BUZ_ON; _delay_us(500); BUZ_OFF #define LED_PIN (1<<PC7) // definicja pinu do którego podłączona jest dioda #define LED_PIN1 (1<<PC6) #define LED_TOG PORTC ^= LED_PIN // makrodefinicja – zmiana stanu diody #define LED_TOG1 PORTC ^= LED_PIN1 static void kroki_lewo(void); static void kroki_prawo(void); uint8_t rep; /* przydatne definicje pinów sterujących */ #define A1 (1<<PD4) // 4 #define B1 (1<<PD5) // 8 #define B2 (1<<PD6) // 16 #define A2 (1<<PD7) // 32 /* definicje kroków sterujących pracą silnika */ #define KROK1 PORTD |= A1|B1; PORTD &= ~(A2|B2) // 12 >> HEX: 0xC #define KROK2 PORTD |= A2|B1; PORTD &= ~(A1|B2) // 40 >> HEX: 0x28 #define KROK3 PORTD |= A2|B2; PORTD &= ~(A1|B1) // 48 >> HEX: 0x30 #define KROK4 PORTD |= A1|B2; PORTD &= ~(A2|B1) // 20 >> HEX: 0x14 void enkoderek( int8_t edir, int value ); void przycisk( void); // główna funkcja programu int main( void ) { /* ustawiamy piny sterujące L293D jako wyjścia */ DDRD |= A1|A2|B1|B2; DDRC |= LED_PIN | LED_PIN1; // kierunek pinu PC7 – wyjściowy DDRB |= BUZ; BUZ_OFF; mk_encoder_init(); register_enc_event_callback( enkoderek); register_enc_event_sw_callback( przycisk ); // wyświetlacz LCD DDRA |= ( 1 << PA7 ); PORTA |= ( 1 << PA7 );// podświetlenie LCD lcd_init(); lcd_str_P( PSTR( "bipolar" ) ); sei(); // globalne zezwolenie na przerwania while ( 1 ) { ENCODER_EVENT(); // zdarzenie enkodera } } void przycisk( void ) { BEEP1; } void enkoderek( int8_t edir, int value ) { BEEP1; if(edir==-1)kroki_prawo() ; // else kroki_lewo(); } /* funkcja wykonująca cyklicznie kroki (obrót w lewo) */ static void kroki_lewo(void) { static uint8_t kr; if( kr == 0 ) { KROK1; } if( kr == 1 ) { KROK2; } if( kr == 2 ) { KROK3; } if( kr == 3 ) { KROK4; } if( ++kr > 3 ) kr=0; } /* funkcja wykonująca cyklicznie kroki (obrót w prawo) */ static void kroki_prawo(void) { static uint8_t kr; if( kr == 0 ) { KROK4; } if( kr == 1 ) { KROK3; } if( kr == 2 ) { KROK2; } if( kr == 3 ) { KROK1; } if( ++kr > 3 ) kr=0; } komentarzami się nie przejmujcie bo nie miałem je kiedy poprawić, a po za tym kiedy przekręcam enkoderem to i tak silnik nie rusza :) i nie wiem w czym jest błąd
  22. To mój pierwszy post na tym forum ale od razu chciałbym przedstawić zbudowanego przeze mnie robota. Mimo że to pierwszy post to odwiedzałem to i inne fora wielokrotnie w poszukiwaniu przydatnych informacji i wykorzystując jedynie „magiczny” guzik szukaj udało mi się rozwiązać większość problemów z budową. To dla tych którzy nie chcą i nie lubią szukać… Wracając jednak do robota to został on nazwany X-walker i jest czteronożnym robotem kroczącym o symetrycznej konstrukcji. Został zaprojektowany jako robot którego zadaniem będzie przejście po nieznanym terenie przy jednoczesnym zachowaniu równowagi i odpowiednim położeniu korpusu. Prace nad robotem aktualnie się zakończyły, aczkolwiek temat jest obszerny i wiele można jeszcze ulepszyć albo dodać, więc w przyszłości robot zostanie poddany kolejnym modyfikacją. 1.Budowa mechaniczna Konstrukcja mechaniczna robota została zaprojektowana przy użyciu programu Autodesk Inventor 2010. Program ten umożliwił stworzenie wirtualnego modelu robota oraz przetestowanie zależności mechanicznych występujących pomiędzy jego elementami. Dzięki temu wybrano optymalne wymiary poszczególnych części. Poniżej na rysunku 1 zaprezentowano projekt robota z programu Inventor (bez elektroniki oraz okablowania): Na materiał konstrukcyjny wybrano aluminium jako, iż posiada odpowiednią wytrzymałość, jest przy tym lekkie i nadaje się do obróbki za pomocą prostych narzędzi. Zaprojektowane elementy wycięto przy pomocy lasera z 1.5mm i 2mm arkuszy aluminium. Poniżej przedstawiono wycięte elementy: Dalszy etap prac polegał na odpowiednim ukształtowaniu niektórych części. Proces ten odbywał się ręcznie przy udziale odpowiednich kopyt wykonanych z drewna bukowego i stali. Następnie dokonano montażu elementów przy pomocy różnego rodzaju łączników śrubowych o średnicach od 2 do 4mm. Dodano także inne elementy, takie jak tulejki dystansowe czy części składowe stóp ze zintegrowanymi czujnikami stykowymi. Na kolejnym rysunku przedstawiono złożonego robota: Poniżej przedstawiono szczegóły budowy stopy: Napęd robota stanowi 12 serwomechanizmów Power HD 1201 o parametrach przedstawionych poniżej (dane producenta): - moment 12.2/13.2 kg/cm - prędkość 0.16/0.14 sec/60° - napięcia 4.8/6.0 V - waga 60 g - wymiary 40.7 x 20.5 x 39.5 mm Niestety niektóre dane obiegają od wartości rzeczywistych, szczególnie wartość momentu, ale co ciekawe nawet wymiary nie są zgodne z rzeczywistymi. Podsumowując, konstrukcja mechaniczna robota posiada kilka charakterystycznych cech: - zwarta i solidna konstrukcja - podwójne łożyskowanie wszystkich stawów - zintegrowane czujniki stykowe w stopach - całkowita rozbieralność konstrukcji – tylko połączenia śrubowe - możliwie najmniejsze wymiary przy zastosowaniu danych elementów wyposażenia robota - liczne otwory odciążające konstrukcję 2. Elektronika Część elektroniczna robota posiada budowę modułową. Każdy moduł zawiera mikrokontroler AVR i pełni odpowiednie dla siebie funkcje. Każdy posiada także odpowiednio multipleksowane wyprowadzenie ISP, co pozwala programować moduły podczas ich działania. Moduły stanowią odrębne jednostki elektroniczne i można ich używać oddzielnie nie koniecznie w robocie X-walker. Do komunikacji między sobą wykorzystują SPI. Takie rozwiązanie nie ogranicza w dalszej rozbudowie robota i pozwala stale dodawać nowe elementy i funkcje. Poniżej scharakteryzowano poszczególne moduły. 2.1. Moduł sterujący „BRAIN” Jest głównym modułem w robocie, zawiaduje działaniem pozostałych. Został oparty na mikrokontrolerze ATmega 16A z kwarcem 16MHz. Posiada wyprowadzone piny z magistralą I2C i SPI, wyświetlacz LCD oraz 2 dodatkowe przyciski na potrzeby przyszłych funkcji. Poniżej krótka charakterystyka: - arbiter magistrali SPI - komunikacja z akcelerometrem i żyroskopem poprzez I2C - Realizacja filtru Kalmana w celu wyznaczenia aktualnego pochylenia robota - obsługa wyświetlacza LCD - nadzorowanie pracy innych modułów - formowanie odpowiednich ramek danych do komunikacji z PC 2.2. Moduły sterowników serw Robot posiada dwa takie same moduły sterowników serw, każdy obsługuje 6 serwomechanizmów, czyli 2 nogi robota. Moduły także oparte są o mikrokontroler ATmega 16A na kwarcu 16MHz. Najważniejszymi funkcjami tych modułów jest oczywiście generowanie odpowiedniego sygnału PWM dla serwomechanizmów, ale także obsługa czujników stykowych i pomiar napięć na potencjometrach serw (dodatkowy przewód wychodzący z każdego serwa). Ta ostatnia cecha służy sprawdzeniu czy serwomechanizm jest rzeczywiście wychylony od taką wartość jaką wyznacza sterowanie, co jest przydatne w pracy przy dużym obciążeniu. Należy dodać, że sygnały analogowe z potencjometrów przed dotarciem do tych modułów przechodzą przez filtr analogowy. 2.3 Moduł nadawczo odbiorczy „BT_RX_TX” Moduł ten jest odpowiedzialny za obsługę dwóch modułów bluetooth, jednego wysyłającego a drugiego obierającego dane z komputera. Dane przychodzące są odpowiednio filtrowane. W module zastosowano mikrokontroler ATmega 8A oraz kwarc 14.745MHz odpowiedni do transmisji szeregowej. Standardowo w module instaluje się dwa moduły bluetooth BTM-222. Poniżej zdjęcie przedstawiające moduł zamontowany w robocie: 2.4. Moduł zasilający "POWER" Robot jest zasilany dwoma zestawami akumulatorów. Pierwszy większy zestaw (2x LiPo 1850 mAh 7.4V) zasila serwomechanizmy, drugi mniejszy (LiPo 850 mAh 7.4V) zasila układy elektroniczne. Moduł zasilający monitoruje wartości napięć poszczególnych akumulatorów a także mierzy prąd jaki zużywają napędy robota. Zajmuje się także stabilizacją napięć – 5V dla elektroniki i poprzez stabilizator impulsowy (niewidoczny na zdjęciach) 5.3V lub 6V dla serwomechanizmów. Moduł zasilający posiada budowany układ dźwiękowy sygnalizujący niski stan napięcia w akumulatorach. Zajmuje się także monitorowaniem temperatury w istotnych miejscach robota za pomocą magistrali 1-wire oraz czujników DS18b20. Te miejsca to: stabilizator impulsowy dla serw, stabilizator liniowy dla elektroniki, temperatura w serwomechanizmie „udowym”, temperatura otoczenia. Zdjęcie użytego zasilacza impulsowego oraz zdjęcie robota po zamontowaniu modułu "POWER". Widoczny radiator stabilizatora liniowego elektroniki: 2.5 Pozostałe moduły Moduł żyroskopu Zawiera żyroskop cyfrowy L3G4200D oraz kilka elementów elektronicznych niezbędnych do jego działania . Na zdjęciu widać poprawiony błąd na PCB. Praktyczniej było to zrobić w ten sposób niż zmieniać całą płytkę bo wiązałoby się to z ponownym lutowaniem obudowy LGA żyroskopu. Moduł akcelerometru Zawiera akcelerometr (i magnetometr) cyfrowy LSM303DLH oraz tak jak moduł żyroskopu kilka elementów elektronicznych niezbędnych do jego działania. IMU - interial measurmet unit Moduł IMU czyli tzw. interial measurmet unit złożony i zamontowany w całości wraz z konwerterami napięć dla sygnałów magistrali I2C Moduł filtrów analogowych RC (2 sztuki) Filtruje napięcia na potencjometrach serw aby można było je prawidłowo zmierzyć poprzez wbudowane w mikrokontrolerach przetworniki ADC 3. Sterowanie X-walker jest sterowany za pomocą komputera PC i odpowiedniej aplikacji. Zastosowanie dwóch modułów Bluetooth pozwoliło na szybkie przekazywanie danych w obu kierunkach i uzyskanie kroku sterowania na poziomie 40ms. Czas ten nie jest niestety gwarantowany z racji zastosowania protokołu Bluetooth, aczkolwiek robot porusza się płynnie i reaguje błyskawicznie na zmiany sterowania. W jednym cyklu sterowania od robota odbierane są odpowiednie dane, wyliczane jest sterowanie i dane ponownie wysyłane są do robota. Na ekranie komputera możemy obserwować dane generowane przez wszystkie moduły robota jak również aktualne położenie środka ciężkości robota względem jego stóp z naniesionym wielokątem podparcia (obraz poniżej) Po wybraniu odpowiednich ustawień chodu robota oraz prędkości poruszania się następuję połączenie z robotem. O tej pory możemy nim sterować: chód przód, tył, na boki oraz obroty w lewo prawo. Wszystkie inne „akcje” związane z chodzeniem po trudnym terenie robot podejmuje sam. Na filmach poniżej można więc zaobserwować jak przekłada nogę w celu znalezienia odpowiedniego miejsca do położenia jej bądź też ratuje się przed wywrotką po obsunięciu się którejś z nóg. Innych elementów prawdopodobnie nie widać na filmach a mianowicie robot dba cały czas o odpowiednie usytuowanie środka ciężkości tym samym zapewniając sobie stabilność. Każdorazowo dobiera odpowiednie przemieszczenia nóg wzdłuż wszystkich osi oraz przemieszczenie korpusu. Korpus robota jest pozycjonowany automatycznie za sprawa sterowników PID które wyliczają sterowanie na podstawie danych z żyroskopu i akcelerometru przetworzonych przez filtr Kalmana. Wysokość korpusu nad ziemią także jest ustalana przez odpowiedni algorytm. Dodatkowo robot pilnuje aby każda noga która w danej fazie chodu ma spoczywać, w przypadku utraty podłoża „znalazła” nowe poprzez systematyczne obniżanie jej. Opis powyżej przedstawia pokrótce sposób w jaki sterowany jest robot, aczkolwiek nie zawiera wszystkich szczegółów. Zostały wymienione tylko główne funkcje algorytmów sterujących. Zdaje sobie sprawę że opis ten może być ciężki do zrozumienia, ale nigdy nie miałem talentu do opisywania tego co robie, więc śmiało można pytać i będę się starał rozwiewać wątpliwości oraz uzupełnić opis w miarę możliwości. Na koniec jeszcze kilka zdjęć i filmy: Kinematyka odwrotna: Kontrola przechyłu korpusu: Chodzenie po nierównym terenie: Chodzenie po ruchomej równoważni: I jeszcze coś w HD, łażenie po kamyczkach:
  23. Przeglądałem w księgarni książkę: https://helion.pl/ksiazki/programowanie-ukladow-avr-dla-praktykow-elliot-williams,prouka.htm#format/d wydaje mi się, że jest warta swojej ceny. Na stronie wydawnictwa [lub w swojej ulubionej księgarni] można zapoznać się z jej opisem. Książka powyższa nie jest wymieniona [nie zauważyłem] na liście książek: https://forbot.pl/blog/ksiazki-o-robotyce-elektronice-i-programowaniu
  24. Witam , wchodzie w temat uC i proszę o pomoc (ATmega8a) DDRB=0b00001111;// ustawienie pinów 0-3 portu B jako wyjście DDRB &= ~(1<<PB7); PORTB |= (1<<PB7); DDRD &= ~(1<<PD7); PORTD |= (1<<PD7); próbowałem też: DDRB=0b00001111;// ustawienie pinów 0-3 portu B jako wyjście //DDRB &= ~(1<<PB7); PORTB |= (1<<PB7); DDRD &= ~(1<<PD7); PORTD |= (1<<PD7); Dlaczego nóżka D7 ma wysokie napięcie (H) a nóżka B7 nie ?
  25. Lampy nixie to chyba najczęściej powracający temat wśród amatorskich projektów elektronicznych. Myśl o skonstruowaniu zegara z takim wyświetlaczem chodziła mi po głowie już wiele lat temu, w tym celu zaopatrzyłem się w zestaw lamp IN-14. Niestety z powodu braku czasu i dużej ilości projektów o wyższym priorytecie zadanie to ciągle było odkładane na później. Może to i lepiej, bo w międzyczasie miłośnicy amatorskiej elektroniki zyskali dostęp do całkiem ciekawych elementów, które mogłem wykorzystać w projekcie. Prezentowany zegar powstał w 2017 roku. Jego głównym elementem jest mikrokontroler Atmega644, który wykonuje wszystkie operacje związane z odmierzaniem czasu i obsługą multipleksowanego wyświetlacza. Dodatkowo zegar został wyposażony w moduł WiFi z układem ESP8266, pracujący pod kontrolą własnego programu. Zadaniem modułu jest cykliczne sprawdzanie czasu na serwerze NTP i korygowanie ustawień lokalnego RTC. Urządzenie posiada też układ scalony FT232, dodający możliwość konfiguracji przez USB. Stałe napięcie około 180V jest generowane za pomocą przetwornicy boost na układzie MC34063A. Oprogramowanie zegara zostało wyposażone w funkcję automatycznego wykrywania czasu letniego i zimowego. Na płycie czołowej znajduje się przełącznik umożliwiający włączenie trybu, w którym wyświetlany jest czas UTC - funkcja ta została dodana w związku z moimi radioamatorskimi i krótkofalarskimi zainteresowaniami. Konstrukcja została zamontowana wewnątrz obudowy ze sklejki wycinanej laserowo. Fizycznie urządzenie składa się z dwóch osobnych płyt, Jedna z nich mieści zestaw lamp nixie, druga elektronikę sterującą.
×
×
  • Utwórz nowe...