Lut 13

Wielozadaniowość AVR. #1

Witam dzisiaj chciałbym pokazać wam jak w prosty sposób można pozbyć się „delay” z programu.

Zacznijmy jednak od tego czy jest to wogóle możliwe na jednym rdzeniu ? Otóż tak i nie. Nie dla tego że nie wykonany kilku operacji w tym samym czasie, Tak dla tego że atmega jest na tyle szybka dla większości naszych programów że możemy powiedzieć że wykonuje kilka poleceń na raz. Lecz naz bardziej interesuje zagadnienie w jaki sposób pozbyć się zbędnych delay’ów. Poniewarz są przypadki w których właśnie potrzebujemy migać niezależnie kilkoma diodami w różnych odstępach czasowych przytym wykonując polecenia co określony czas.

W tej części zbudujemy program z wykorzystaniem programowych timerów. A więc do dzieł 😉

Na początek założenia;

  • Miganie diodą podpiętą do pinu 13, co 1 sekundę.
  • Wystawianie wiadomości na serial porcie „Helo world ;)” co 5 sekund.
  • Wystawianie napisu na serial porcie „Siemka” co 7 sekund.

Ok to już wiemy co mamy robić, a więc do roboty.

Na wstępie musimy zainicjalizować zmienne typu int, symulujące nasze timery.

int timer_1 = 0;

int timer_2 = 0;

int timer_3 = 0;

Następnie musimy zainicjalizować funkcję setup.

void setup() {

Serial.begin(9600);

pinMode(13, OUTPUT);

}

A teraz pętla loop. W tej pętli będzie cały mechanizm napędzający timery 😉

void loop() {

if(timer_1 > 1000){

timer_1 = 0;                             //  Tutaj zerujemy timer

timer_1_tick();                              //  Tutaj wywołujemy funkcję w której możemy umieszczać kod

} else {  timer_1++;  }

 

if(timer_2 > 5000){

timer_2 = 0;                             //  Tutaj zerujemy timer

timer_2_tick();                             //  Tutaj wywołujemy funkcję w której możemy umieszczać kod

} else {  timer_2++;  }

 

if(timer_3 > 7000){

timer_3 = 0;                             //  Tutaj zerujemy timer

timer_3_tick();                             //  Tutaj wywołujemy funkcję w której możemy umieszczać kod

} else {  timer_3++;  }

delay(1); // Jedyny a zarazem najwarzniejszy delay 😉 bez niego nasze timery nie będą działać.

}

No i gdy już mamy cały szkielet programu możemy pisać nasze funkcje. A więc do dzieła zacznijmy od timer_1_tick. Jak wcześniej pisałem, ta funkcja ma migać nam diodą led a więc niech tak będzie 🙂

 

void timer_1_tick(){

digitalWrite(13, !digitalRead(13));

No i gotowe. A więc lecimy dalej do następnej funkcji timer_2_tickTa funkcja ma nam wysyłać napis „Helo world” A więc do kodu:

void timer_2_tick(){

Serial.println(„Helo world”);

I jak proste ?, a więc dalej, następna funkcja ma nam wysyłać napis „Siemka”. A więc piszemy następną już ostatnią funkcję o nazwie timer_3_tick.

void timer_3_tick(){

Serial.println(„Siemka”);

No i to już cały kod, możecie spokojnie dodawać więcej timerów. Uwaga nie wolno stosować tutaj już żadnych „delay” ponieważ cały kod nie będzie się poprawnie wykonywał 🙂

Myślę że kod jest prosty i spokojnie sobie z nim poradzicie, w kolejnych częściach omówię program na timerach sprzętowych, a więc zapraszam do śledzenia nowych poradników.

PS: Tutaj macie cały kod kopiuj wklej 🙂

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
int timer_1 = 0;
int timer_2 = 0;
int timer_3 = 0;

void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop() {
if(timer_1 > 1000){
timer_1 = 0;                             //  Tutaj zerujemy timer
timer_1_tick();                              //  Tutaj wywołujemy funkcję w której możemy umieszczać kod
} else {  timer_1++;  }


if(timer_2 > 5000){
timer_2 = 0;                             //  Tutaj zerujemy timer
timer_2_tick();                             //  Tutaj wywołujemy funkcję w której możemy umieszczać kod
} else {  timer_2++;  }


if(timer_3 > 7000){
timer_3 = 0;                             //  Tutaj zerujemy timer
timer_3_tick();                             //  Tutaj wywołujemy funkcję w której możemy umieszczać kod
} else {  timer_3++;  }
}

void timer_1_tick(){
digitalWrite(13, !digitalRead(13));
}

void timer_2_tick(){
Serial.println("Helo world");
} 

void timer_3_tick(){
Serial.println("Siemka");
} 

Lut 03

Kwestia zasilania modułu ESP

Witam dzisiaj chciałbym wam przedstawić jak poprawnie zasilić moduł ESP.

Zacznijmy jednak od teorii 😉

Po pierwsze moduł ten nie lubi wahań napięcia, jest wrażliwy na zakłócenia.

Po drugie i co najważniejsze to pożeranie prądu przez moduł. Potrafi on pobrać w szczególnych przypadkach przy pełnym obciążeniu, obsługując wiele połączeń nawet ponad 600mA.

 

A więc jak poprawnie zasilić ten moduł ?

Potrzebujemy, źródełko prądowe 3.3V o wydajności prądowej min 600mA.

Zasilanie możemy zorganizować na dwa sposoby:

  1.  Stabilizator liniowy, generujący mało zakłóceń lecz też wiele strat w układzie. Jest to tanie rozwiązanie i łatwe do zbudowania. Jedyne co musimy wiedzieć to jakie mamy źródełko zasilania. Dla tego poradnika załóżmy że mamy zasilanie z ładowarki do telefonu o wydajności 1A. Takowa ładowarka na wyjściu ma napięcie 5V a więc wyższe od tego co potrzebujemy.  A więc do budowy zasilacza użyjemy: Stabilizatora, 2 (lub więcej) kondensatory, lutownicę, kabelek od ładowarki, z wtyczką usb typu A (Męskie). Na początku obcinamy końcówkę którą wpinamy do telefonu, obieramy kabelek (około 5cm). Po ściągnięciu izolacji zobaczymy 4 przewody (Czerwony 5V, Czarny GND, Zielony i biały [Dane]) . Nas będą interesować tylko te 2 czyli czerwony i czarny, pozostałe 2 obcinamy, lecz tak aby się nie zwierały ze sobą (jeden lekko dłuższy). Następnie bierzemy do ręki stabilizator i sprawdzamy gdzie ma IN, GND, OUT, (w przypadku tego stabilizatora ja mam tak ułożone piny GND, OUT, IN). A więc do nóżki GND lutujemy 2 przewody, czyli czarny z kabelka usb oraz kawałek kabelka do którego podłączymy moduł ESP. Następnie do następnej nóżki OUT lutujemy kabelek o podobnej długości jak poprzedni. Kolejna nóżka to IN i do niej lutujemy kabelek Czerwony z ładowarki. I tak mamy już zasilanie 3.3V na wyjściu tych dwóch dolutowanych kabelków. Następnie do wyjścia (Tak będę nazywał te dwa dolutowane kabelki :)) dolutowujemy kondensatorek 500uF a nawet i 1000uF (Elektroit). Jeśli chodzi o kondensator to, za mały sobie nie poradzi z filtracją, ponieważ ESP szarpie napięcie, a zaś za duży może uszkodzić stabilizator, itp. A więc gdy już mamy dolutowany kondensator mamy już dobre napięcie zasilania dla modułu ESP. Jedyne co musimy zrobić to podłączyć moduł do wyjścia napięcia przygotowanego przez nas.  Oto przykładowe podłączenie na płytce stykowej 🙂
  2. Przetwornica napięcia. Przetwornicę polecam użyć gotową, np ATB-PWR-3. Bardzo dobra przetwornica, polskiej firmy Atnel, Pana Mirka :). Polecam właśnie używanie dobrych przetwornic, ponieważ zapewnią one dobre zasilanie twojego modułu, nie psują się szybko i nie generują dużych zakłóceń. Pan Mirek, stosuje w swoich przetwornicach dobre komponenty, i gwarantuje pełne wsparcie techniczne (Co mogę potwierdzić 😉 ), dlatego właśnie tą przetwornicę polecam. Oczywiście możecie też zbudować własną przetwornicę, jak ją wykonać pokazuje ElektroPrzewodnik w swoich filmikach, np Tym, (Mówi o StepUP lecz stepDown robi się podobnie ;). 

Sty 29

Programowanie po FI-FI czy to możliwe ?

Oczywiście że jest to możliwe 🙂 Powiem więcej, jest to bardzo proste i przyjemne. Jedyne co trzeba posiadać to moduł ESP8266 (Najlepiej 12E/12 <—– Zgodny z poradnikiem 😉 ).

W filmie nie powiedziałem jednej ważnej rzeczy, mianowicie tego że możecie programować po AccesPoint’cie 😉 Bez konieczności podłączenia do sieci WI-FI.

 

Hasło do AccesPoint’a to: qwerty1231

Port to 9876.

 

 

Zapraszam do poradnika, komentowania, łapkowania, itp :).

PS: W kolejnych poradnikach pokażę jak programować z użyciem programowego Resetu procesora. Dzięki temu można użyć do programowania moduły ESP8266 01.

 

Uwaga. Aby programowanie się udawało, należy zapewnić dobre połączenie przewodów RX/TX/RESET oraz należy zapewnić stabilne zasilanie 3.3V o wydajności 600mA. Tutaj w tym wpisie jest opisana podstawowa aplikacja modułu ESP8266 01.

Starsze posty «