HomeMade
Arduino - Wersja do druku

+- HomeMade (http://sp-hm.pl)
+-- Dział: Oprogramowanie (/forum-84.html)
+--- Dział: Technika programowania mikroprocesorów (/forum-85.html)
+--- Wątek: Arduino (/thread-1713.html)

Strony: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23


RE: Arduino - SP6IFN - 01-07-2013 12:52

Przykładowy, mój zestaw do programowania wygląda tak jak na foto nr.1.
Aby procesor programowany był widoczny w kompilatorze należy go zdeklarować w pliku <boards.txt> kompilatora, np. tak:
Cytat:##################################################​###############

atmega8a.name=ATmega8a @ 8 MHz

atmega8a.upload.maximum_size=7168
atmega8a.upload.using=arduino:arduinoisp

atmega8a.bootloader.low_fuses=0xe4
atmega8a.bootloader.high_fuses=0xc4
atmega8a.bootloader.path=atmega
atmega8a.bootloader.file=ATmegaBOOT_8.hex
atmega8a.bootloader.unlock_bits=0x3F

atmega8a.build.mcu=atmega8
atmega8a.build.f_cpu=8000000L
atmega8a.build.core=arduino
atmega8a.build.variant=standard
,
a następnie już tylko wybrać z listy płyt dostępnych, foto nr. 2.
W katalogu dostępnych bootloaderów musi być umieszczony również plik.hex ATmegi8.....dostępny na stronach podanych poprzednio.
Konieczny jest również mały "myk" okablowania co widać na fotce nr.1. W przeciwnym wypadku będziemy stale resetowali programator a nie programowany układ, do niczego to nie doprowadzi. Opis "myku" w majsterkowie przy opisie programowania Attiny2313. Link w poprzednim niusie.
Rysio!
Tak jakbym troche nie dokończył myśli. To co napisałem dotyczy wypalenia bootloadera.
Docelowy program wgrywamy w ten sam sposób, ale już bezpośrednio z okna kompilatora Arduino.
Rysio!


RE: Arduino - SP5FCS - 01-07-2013 14:10

Bardzo ciekawe, szybko rozwijające się środowisko, duża ilość przykładów pozwalająca na szybki start i pogłębianie wiedzy o procesorach. Gotowe moduły z procesorem są dobre na początek do nauki i testów, niestety potem i tak trzeba narysować własną płytkę. Wiele rozwiązań jest do adoptowania na potrzeby naszego hobby, część jednak musimy sami opracować.

Mam taką propozycję aby zrobić własną platformę HM-duino, czyli moduły możliwe do wykonania w domu na żelazku z projektami płytek i schematami dostępnymi na forum. Po co ? Będzie nie tylko taniej, każdy będzie mógł przerobić druk pod własne potrzeby, powstanie kilka modułów na potrzeby sterowania nowoczesnym radiem. Jedno nie wyklucza drugiego a zawsze będzie to wykonanie home made.

Pierwszy procesor na ATmega8 prawie jest gotowy (mini komputer QRP ).


RE: Arduino - SQ9MDD - 01-07-2013 19:30

Cytat:Mam taką propozycję aby zrobić własną platformę HM-duino, czyli moduły możliwe do wykonania w domu na żelazku z projektami płytek i schematami dostępnymi na forum. Po co ? Będzie nie tylko taniej, każdy będzie mógł przerobić druk pod własne potrzeby, powstanie kilka modułów na potrzeby sterowania nowoczesnym radiem. Jedno nie wyklucza drugiego a zawsze będzie to wykonanie home made.
...home made i w zgodzie z filozofią Open Hardware

Idealną platformą do takich zabaw są płytki arduino mini:

Podaję linka jako przykład:
http://www.ebay.com/itm/Redesign-Pro-Mini-atmega328-5V-16M-Replace-ATmega128-Arduino-Compatible-Nano-/310562519074?pt=LH_DefaultDomain_0&hash=item484ef7f822

Łatwo taką płytkę na goldpinach wstawić we własny projekt. i mamy już tak zwanego shielda, czyli rozszerzenie dla płytki arduino z jakąś funkcjonalnością (sterownik przemiennika/sterownik syntezera/sterownik rotora/ itd... / itd...).
W jednym z poprzednich postów pokazywałem prototyp transceivera który takim hm radio shieldem mógłby być.

I jeszcze pytanie na koniec czy są koledzy którzy nie programowali procesorów i byli by zainteresowani postawieniem pierwszych kroków w tej materii własnie w oparciu o arduino?


RE: Arduino - SP3WXO - 01-07-2013 22:27

Chciałbym na wstępie zaznaczyć, że nie jestem przeciwnikiem żadnego z kierunków jeżeli chodzi o programowanie AVR-y.
Jak każda rzecz w realnym świecie ma swoje wady i zalety. Poniżej przedstawię swoje rozmyślania i nie chcę, aby odebrano to jako krytykę czegokolwiek jak i kogokolwiek.

A więc do rzeczy.

Nie jestem ekspertem w dziedzinie programowania, ale bardzo mnie to wciągnęło i mam madzieję, że tak zostanie. Zacząłem od Bascoma gdzie spodobała mi się prosta składnia, wiele elementów programowania zostało zautomatyzowane np obsługa wyświetlaczy LCD. Kompilator ten obsługuje w zasadzie wszystkie procesory AVR włącznie z Xmega. Podobnie ma się z programatorami (prawie wszystkie Smile ). Do wielkich minusów tego opraogramowanie jest to, że jest płatne i to nie mało.
Kolega z którym pracuje powiedział mi: spróbuj C. Jest bezpłatne, istnieje kilka darmowych kompilatorów, obsługują tak jak Bascom wszystkie procesory AVR i nie tylko AVR. Próbowaliśmy AVR Studio, Eclipse.
Do gustu przypadło Eclipse, a mi w szczególności, bo jeden sterownik programatora obejmuje i Eclipse i Bascom. Nie trzeba przełączać pomiędzy sterownikami.
Przez jakiś czas zastanawialiśmy się nad Arduino, ale odpadło, ponieważ domyślnie obsługuje parę tylko procesorów AVR (nie jest to problem używając bootloadera, ale zawsze jakieś utrudnienie). Z tego co się orientuje ( mogę nie mylić, tak więc prostujcie panowie ) arduino nie obsługuje Xmega.
Składnia Arduino bardzo przypomina język C, a kompilator automatyzuje parę procesów zachodzących w czasie kompilacji.
Dlatego moje pytanie jest czy warto używać arduino skoro jest C?

Ciekaw jestem waszych opini.


RE: Arduino - SQ9NJE - 01-07-2013 22:45

Ja właśnie preferuję takie moduliki wtykane w płytkę stykową. Jakoś wydaje mi się to bardziej elastyczne niż tradycyjne "shieldy" i łatwiej mi w ten sposób na szybko poskładać jakiś prototyp.

Na swoje potrzeby zrobiłem klon Arduino Nano. Sprzętowo jest właściwie zgodny z oryginałem Gravitecha, ale przystosowałem go do posiadanych przeze mnie elementów. Przy odrobinie kreatywności w zdobywaniu części wyszło znacznie taniej niż gotowce z Allegro. Projekt z Eagla udostępniłem i opisałem trochę na swojej stronie http://www.sq9nje.pl/klon-arduino-nano/.


RE: Arduino - SQ9MDD - 01-07-2013 23:42

(01-07-2013 22:27)SP3WXO napisał(a):  Dlatego moje pytanie jest czy warto używać arduino skoro jest C?

Ciekaw jestem waszych opini.

Bardzo długo wzbraniałem się przed arduino, uważając że to jakaś dziwaczna nakładka na C, jakiś potworek który zżera i tak małe zasoby mikroprocesora.

Jednakże po dotknięciu tematu "organoleptycznie" (dzięki Tomku SQ9ATC) wyszedłem z założenia że interesuje mnie osiągnięcie efektu, to znaczy nie zamierzam się doktoryzować z procesora tylko po to by wyświetlić "Hello World"(takie samo twierdzenie jak to, że życie jest zbyt krótkie na QRP :/ ). Używając arduino pozwalasz że inni odwalili za Ciebie dużo pracy, bo dostajesz do ręki proste środowisko z masą bibliotek działające od kopa, za darmo. Oczywiście coś kosztem czegoś. Mój program napisany w bascomie do sterownika przemiennika zmieściłem w 2313, Ten sam program w arduino już mi się tam nie mieści.... ale to moja wina bo korzystam z gotowych łatwych funkcji i program puchnie, równie dobrze mógłbym podszlifować C i napisać to oszczędniej.
Jeśli chodzi o porównanie z bascomem... kod pisze się łatwiej i szybciej odnoszę też wrażenie że jest bardziej przejrzysty.

Oczywiście to moja subiektywna opinia więc niema się co sugerować Wink

EDIT:

Przemek fajna stronka! Podoba mi się ten klon...

EDIT 2:

Na xmega już coś koledzy chyba kombinują...
http://code.google.com/p/xmegaduino/


RE: Arduino - SP5FCS - 01-07-2013 23:47

(01-07-2013 22:27)SP3WXO napisał(a):  Dlatego moje pytanie jest czy warto używać arduino skoro jest C?

Czy warto używać innych języków skoro każdy procesor ma assembler ?

Wszystko zależy od tego komu i do czego ma posłużyć określone narzędzie. Takie środowiska jak Bascom czy Arduino powstały po to aby ułatwić stawianie pierwszych kroków w przygodzie z procesorami. Duża ilość gotowych funkcji, działających przykładów oraz gotowych modułów daje spore oszczędności czasu i przyśpiesza naukę programowania.
Kiedy rośnie nasze doświadczenie oraz wymagania i zaczynamy budować bardziej złożone układy i tak musimy wykonać indywidualny projekt sterownika i napisać własne funkcje do jego obsługi.

Moim zdaniem środowisko Arduino jest dobrą alternatywą dla Bascoma pozwalającą na szybkie zbudowanie kilku pierwszych sterowników oraz opanowanie podstaw mikroprocesorów. Do celów edukacyjnych dostępny zestaw procesorów jest wystarczający a z czasem będzie ich więcej. Niestety ceny modułów nie są niskie (60...200) zł. Naturalnym etapem po Arduino będzie poznawanie tajników języka C. Do "wyciskania procków" trzeba niestety i tak nauczyć się assemblera.

Wiem, że wielu kolegów woli wydać 100zł i kupić gotowy moduł. Jednak dla wielu to spory wydatek, szczególnie jak podczas zabawy coś uszkodzimy. Wykonanie modułu home made to 30% ceny oryginału, można go naprawiać, rozebrać na części, zmieniać druk, dodawać peryferia, itd.


RE: Arduino - SQ9MDD - 02-07-2013 0:16

(01-07-2013 23:47)SP5FCS napisał(a):  Niestety ceny modułów nie są niskie (60...200) zł.

No więc tak...

Programator USBasp 17PLN (allegro)
Płytka prototypowa 20 PLN
Kabelki połączeniowe 15PLN za xx sztuk
Atmega 328 9PLN

To wystarczy by wystartować z arduino... jeśli w procesorze niema bootloadera w gui zanim klikniemy zaprogramuj wciskamy shift.

W ten sposób programowałem swoje kostki.

Poglądowo zapodaję programik do soft startu silników rotora. Chodzi o to by nie szarpać antenami, projekt zrobiłem w ramach nauki arduino, całość z zaprojektowaniem płytki i napisaniem programu zajęło mi jeden wieczór.
Program zakłada sterowanie prawo lewo góra dół dwoma silnikami, współdzielenie czasu tak by każdy kanał pracował "niezależnie", procesor attiny 2313.

Kod:
/**************************************************​****************
Program miękkiego startu silników rotora dla Piotra SP5MG
Copyleft SQ9MDD 2013
**************************************************​****************/

//==================================================​===============
//zmienne:
//wejscia i wyjścia
int we1 = 0;
int we2 = 1;
int we3 = 2;
int we4 = 3;
int we1_state = 0;
int we2_state = 0;
int we3_state = 0;
int we4_state = 0;
int live_led = 6;
int wy1 = 13;
int wy2 = 12;
int wy3 = 11;
int wy4 = 7;

//dodatkowe zmienne
int wy1_licznik = 0;
int wy2_licznik = 0;
int wy3_licznik = 0;
int wy4_licznik = 0;
int stan_live_led = 1;
unsigned long tempo_startu_silnika = 30; //odcinek czasu co jaki następuje dodanie wartości do PWM
unsigned long tempo_mrugania_diodki_pulse = 150;
unsigned long czas_do_ostatniej_zmiany_wysterowania_silnika = millis() + tempo_startu_silnika;
unsigned long czas_do_ostatniej_zmiany_wysterowania_diody = millis() + tempo_mrugania_diodki_pulse;

void setup(){
  pinMode(we1,INPUT);
  pinMode(we2,INPUT);
  pinMode(we3,INPUT);
  pinMode(we4,INPUT);
  pinMode(live_led,OUTPUT);
  pinMode(wy1,OUTPUT);
  pinMode(wy2,OUTPUT);
  pinMode(wy3,OUTPUT);
  pinMode(wy4,OUTPUT);
}

void loop(){
  unsigned long time = millis();
  if(time >= czas_do_ostatniej_zmiany_wysterowania_silnika){

    //kanał pierwszy we1 - >wy1
    we1_state = digitalRead(we1);
    if (we1_state == HIGH){
      analogWrite(wy1,wy1_licznik);
      if(wy1_licznik<=255){
        wy1_licznik++;
      }
    }
    else{
      wy1_licznik = 0;
      analogWrite(wy1,wy1_licznik);
    }

    //kanał drugi we2 -> wy2
    we2_state = digitalRead(we2);
    if (we2_state == HIGH){
      analogWrite(wy2,wy2_licznik);
      if(wy2_licznik<=255){
        wy2_licznik=wy2_licznik+1;
      }
    }
    else{
      wy2_licznik = 0;
      analogWrite(wy2,wy2_licznik);
    }

    //kanał trzeci we3 - >wy3
    we3_state = digitalRead(we3);
    if (we3_state == HIGH){
      analogWrite(wy3,wy3_licznik);
      if(wy3_licznik<=255){
        wy3_licznik=wy3_licznik+1;
      }
    }
    else{
      wy3_licznik = 0;
      analogWrite(wy3,wy3_licznik);
    }  

    //kanał czwarty we4 - >wy4
    we4_state = digitalRead(we4);
    if (we4_state == HIGH){
      analogWrite(wy4,wy4_licznik);
      if(wy4_licznik<=255){
        wy4_licznik++;
      }
    }
    else{
      wy4_licznik = 0;
      analogWrite(wy4,wy4_licznik);
    }
    czas_do_ostatniej_zmiany_wysterowania_silnika​ = time + tempo_startu_silnika;  
  }
  //dioda pulsująca rytmicznie
  if(time>=czas_do_ostatniej_zmiany_wysterowania_diody){
    if(stan_live_led==1){
      digitalWrite(live_led, HIGH);
      stan_live_led = 0;
      czas_do_ostatniej_zmiany_wysterowania_diody = time+(tempo_mrugania_diodki_pulse/16);
    }
    else{
      digitalWrite(live_led, LOW);
      stan_live_led = 1;
      czas_do_ostatniej_zmiany_wysterowania_diody = time+(tempo_mrugania_diodki_pulse*16);  
    }
  }
  
  //W zasadzie koniec programu jeszcze tylko jedno.
  //Kiedy wartość 'time' przekroczy maksimum (4294967295 czyli około 49dni) i zacznie liczyć od nowa,
  //to funkcje nie będą wywoływane bo czas będzie zawsze mniejszy niż wyliczony z max time + czas wykonania.
  //dlatego resetujemy czasy w przypadku gdy licznik time się przekręca.  
  if (time==0){
    czas_do_ostatniej_zmiany_wysterowania_silnika​ = tempo_startu_silnika;
    czas_do_ostatniej_zmiany_wysterowania_diody = tempo_mrugania_diodki_pulse;
  }
}

[attachment=7189]

[attachment=7191]


RE: Arduino - SQ4AVS - 02-07-2013 6:22

Ryszardzie piszesz:
Mój program napisany w bascomie do sterownika przemiennika zmieściłem w 2313, Ten sam program w arduino już mi się tam nie mieści.... ale to moja wina bo korzystam z gotowych łatwych funkcji i program puchnie
-myślę, że w Bascomie też używasz gotowych funkcji czyli rozumiem, że Bascom daje oszczędniejszy kod.
Mnie do arduino zachęcił jeden z Kolegów pracy który robił obsługę sensorów ultradźwiękowych "na szybko". Przekonuje mnie do arduino bardzo duża ilość bibliotek ale mimo wszystko nie zamierzam rezygnować z bascoma bo nie mam w nim ograniczenia kodu (mam kupioną wersję pełną), brak zabawy z użyciem innych procków no i sporo gotowców. Co do zaczęcia zabawy z arduino to polecam jednak gotowe moduły z ebay-a po prostu taniej się nie da zrobić samemu a i przesyłka darmowa wystarczy wklepać arduino i wybierać. Uważam Ryszardzie, że masz bardzo dobry pomysł z tym cyklem dla arduino dla początkujących myślę, że bardzo wielu osobom początkującym by pomógł, bo z tego co wiem to brak jest polskiej książki o arduino.


RE: Arduino - SP9MRN - 02-07-2013 11:28

Moim zdaniem biblioteki są kluczem. Jest ich cała masa, z każdą chwilą są nowe i coraz lepsze.
Obsługa wyświetlacza - czy tekstowego czy graficznego sprowadza się do umownego "print"
Podobnie jest z innymi bibliotekami.
Uroda arduino leży w otwartości systemu, w tym, że biblioteki pisze społeczność a nie firma.

Zgadzam się z Rafałem, że moduł "mini" z ebaya za 4,08$ (wraz z przesyłką z chin) jest cenowo nie do pobicia.
Trzeba do tego tylko jakiś konwerer na ft232 i można się bawić.
Myślę, że można nie skupiać się na robieniu HM modułu procesorowego a raczej na bardziej specjalizowanych modułach.
Jeżeli ktoś mi powie, że moduł z dwoma przekaźnikami z optoizolacją można zrobić taniej niż za 2,26$ to chyba nie uwierzę... (foto)


Kupowałem od chińczyków sporo rzeczy, dwa razy przesyłka nie dotarła - ale to była strata na poziomie 2x3$. Różnica w cenie chińskiej i polskiej jest tak ogromna, że moim zdaniem warto zaryzykować (chociaż trudno to ryzykiem nazwać). Ale to już każdy sam musi rozważyć.

73
MAc[attachment=7192]

PS dodam, że to samo środowisko może załadować Arduino DUE - czyli płytkę na SAM3X8E (32-bitowy ARM Cortex-M3). To już jest potęga... :-)