Garść najcenniejszej wiedzy dla początkującego programisty

Dyskusje o programowaniu mikroprocesorów.
Awatar użytkownika

Autor tematu
Rafalgl
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 7
Posty: 1210
Rejestracja: 24 gru 2020, 01:43

Garść najcenniejszej wiedzy dla początkującego programisty

#1

Post napisał: Rafalgl » 16 lis 2023, 13:31

Postanowiłem, że nauczę się podstaw programowania. Posiadałem Wemos D1, ale nie było w pełni kompatybilne z Arduino, nie chciał działać ekran OLED po wpisaniu programu przez co odpuściłem sobie tę płytkę. Jednak zapał nie wygasł i niedawno zamówiłem oryginał Arduino Uno R3. Dodatkowo kupiłem Nucleo STM32L4. W drodze też podstawowe podręczniki do tych systemow. Ostatnio uslyszałem o układach EPROM. Niektóre mają raptem 6 wyprowadzeń. Teraz zastanawiam się, co można zbudować w oparciu o taką programowalną pamięć EPROM. Czy programowanie takiego czegoś będzie prostsze na poczatek?

Prosiłbym was o przykłady projektów/urządzeń elektronicznych, do których będą niezastąpione i najlepsze poszczególne układy(z krótkim uzasadnieniem, dlaczego akurat do danego projektu najlepsze będzie np. Raspberry, albo dlaczego wystarczy EPRoM):

Arduino
EPROM
Raspberry
STM32L4

Co jeszcze polecacie na początek? Są może jakieś mikrokontrolery na Pythona? Słyszałem że jest on dość prosty do nauki. Najchętniej zacząłbym naukę przez realizowanie jakichś gotowych projektów, stopniowo starając się rozszyfrować ich działanie, mile widziane stronki z fajnymi projektami łączącymi programowanie i schematu elektroniczne. Pozdrawiam!


Kto pyta, nie błądzi.

Awatar użytkownika

pitsa
Moderator
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 8
Posty: 4693
Rejestracja: 13 wrz 2008, 22:40
Lokalizacja: PL,OP

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#2

Post napisał: pitsa » 16 lis 2023, 14:03

Polecam esp8266, najwięcej zadań u mnie robią.
Różnica między esp a płytkami arduino na 5V jest taka, że przy esp częściej używam konwerterów poziomów logicznych. Przy esp wygodne jest to, że można użyć OTA.

Esp8266 + Oled: https://pl.aliexpress.com/item/1005005242283189.html
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ


atom1477
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 2785
Rejestracja: 21 kwie 2011, 10:58
Lokalizacja: ::

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#3

Post napisał: atom1477 » 16 lis 2023, 14:41

Jak chcesz więcej pinów to są i większe układy EPROM:
https://sklep.infoelektronika.pl/produc ... P40--s3814

Sorki, ne mogłem się powstrzymać :D

Awatar użytkownika

pitsa
Moderator
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 8
Posty: 4693
Rejestracja: 13 wrz 2008, 22:40
Lokalizacja: PL,OP

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#4

Post napisał: pitsa » 17 lis 2023, 08:36

Rafalgl pisze:odpuściłem sobie tę płytkę. Jednak zapał nie wygasł
Rafalgl pisze:Ostatnio uslyszałem o układach EPROM. ... Teraz zastanawiam się, co można zbudować ... Czy programowanie takiego czegoś będzie prostsze na poczatek?

Wygląda mi to jak skakanie z kwiatka na kwiatek bez planu. Niby jakiś cel jest:
Rafalgl pisze:Postanowiłem, że nauczę się podstaw programowania

Radziłbym jednak w celu, i w planie jego realizacji, mieć jakieś konkretne urządzenie, coś przy czym programowanie będzie drogą, a nie celem.

Podam ci przykład z forum. Szopen chce zrobić wygrzewarkę filamentu. widziałeś temat? Ma urządzenie które może przerobić na różne sposoby. Cel jaki sobie postawił to ma posiadać timer i regulację temperatury. Może to zrobić przemysłowym sterownikiem, może zrobić małym prostym sterownikiem temperatury i zwykłym timerem wtyczkowym. Gdyby do tematu zaprząc programowanie to byłaby fajna zabawa w programowanie za pomocą arduino. Krótki program, przykładów na pomiar temperatury jest wiele, algorytm załączania przekaźnika SSR nie jest trudny. Początkujący od zera dałby radę przejść z przykładu mrugania ledem i pomiaru temperatury do efektu działania urządzenia. Na początek ręcznie wpisując parametry w komputerze i przeprogramowując. W kolejnym etapie nauczyć się wyświetlania parametrów na wyświetlaczu zamiast "w arduino". Doskonaląc urządzenie można nauczyć się "programowania" po drodze do celu.

Do powyższego zadania nadaje się wemos D1 który odpuścieś.
Jeśli nie zadziałał ci oled to czemu nie spróbowałeś ze zwykłym LCD z konwerterem i2c? Oled malutki, ładniutki ale z czasem wygląda tak:
Obrazek
Widać tu wypalenie pixeli przez ciągłe wyświetlanie informacji. Rzadziej używane pixele w narożnikach są jaśniejsze.

Zastanów się i powiedz co chciałbyś konkretnego zrobić z programowaniem po drodze. Łatwiej będzie ci konkretnie powiedzieć co warto użyć, czego się nauczyć.
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ

Awatar użytkownika

Autor tematu
Rafalgl
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 7
Posty: 1210
Rejestracja: 24 gru 2020, 01:43

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#5

Post napisał: Rafalgl » 19 lis 2023, 19:46

No biorąc pod uwagę że ostatnio bawię się w zasilacze głównie, to chciałbym np. umieć zbudować menu, w którym będę mógł powiedzmy jednym enkoderem i 2-3 microswitchami uruchamiać poszczególne funkcje/moduły w swoich projektach, zamiast musieć wiercić 10 otworów pod isostat, kolejne 10 pod ledy sygnalizacyjne a w środku plątanina kabli. Fajnie jakby też mogło być tam coś wyświetlane i regulowane na tym ekranie, np. poszczególne napięcia dla kolejnych kanalow. Nie pozbywam się póki co wemosa ale kupiłem Arduino oryginalne, bo wyszedłem z założenia, że będzie bardziej kompatybilne z większością bibliotek i sterowników które są dostępne w necie.

Znalazłem LCD shield ostatnio, z 6 microswitchami, dobre to będzie do nauki? Jak na razie zrobiłem bez pomocy program który zapala i gasi mi kolejno rządek LEDów (a La knight rider).
Kto pyta, nie błądzi.


atom1477
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 2785
Rejestracja: 21 kwie 2011, 10:58
Lokalizacja: ::

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#6

Post napisał: atom1477 » 19 lis 2023, 19:50

Najcenniejsza wiedza dla początkującego programisty jaka w tej chwili jest Ci najbardziej potrzebna, to taka że nie każdy układ programowalny nadaje się do wykonania urządzenia.
Nieporozumienie wynika z dwuznaczności słowa "programowanie".
Po pierwsze oznacza ono pisanie programu (przez człowieka).
Ale oznacza też wgrywanie tego programu (po skompilowaniu) do pamięci układu. I tu ważna uwaga, że tym układem nie musi być od razu procesor. Może to być po prostu pamięć. A wgrywać można nie tylko program, ale też jakieś dane (tablice, np. mapy wtrysku).
Po angielsku mają na to drugie określenie słowo "flashing" (po polsku "flaszowanie"). Dla wyraźnego odróżnienia od "programming" które jest mniej precyzyjne.
I teraz wracamy do "programowania".
Wyszukałeś sobie układy dające się "programować", tyle że w praktyce wyszukałeś układy mające możliwość zaflaszowania.
Na pamięć EPROM nie pisze się programu! EPROM to tylko pamięć, która będzie trzymała dane (może to też być program).
Możesz ją zaflaszować, ale ta pamięć EPROM nie wykona programu. To nie jest układ jakiego szukasz.
Ty szukasz układów jakie są w stanie wykonać program. Pamięć EPROM odpada.
Zostają PICe, AVRy, ARMy, RPi, ESP8266 i jeszcze wiele innych, ale nie EPROM. Arduino celowo pominąłem, bo to nie jest konkretna platforma sprzętowa. Arduino to środowisko (nazywają to też platformą, ale programową).
Przy okazji traka ciekawostka: EPS8266 nie da się zaflaszować! Można na niego napisać program, ale nie można zaflaszować go tym programem. Dlaczego? Bo on nie ma pamięci na program. Program się wgrywa do zewnętrznej pamięci FLASH. Czyli piszesz program na ESP8266, ale ten program wgrywasz do zewnętrznej pamięci FLASH.
Podobnie zresztą jest w PRi. Program jest wgrywany na kartę SD, a nie na RPi.

Awatar użytkownika

pitsa
Moderator
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 8
Posty: 4693
Rejestracja: 13 wrz 2008, 22:40
Lokalizacja: PL,OP

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#7

Post napisał: pitsa » 20 lis 2023, 05:04

Rafalgl pisze:Znalazłem LCD shield ostatnio, z 6 microswitchami

Na początek może być i shield na arduino. Przy okazji potrenujesz dzielnik napięcia, bo z pomocą szeregu rezystorów i pomiaru napięcia na pinie jest odczyt wciśniętego klawisza.
Praktyczniejszy jest jednak LCD z konwerterem i2c gdy będziesz chciał wyprowadzić wyświetlacz na obudowę i zastosować po swojemu rozmieszczone przyciski.
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ


drzasiek90
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1760
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#8

Post napisał: drzasiek90 » 21 lis 2023, 20:06

Matko z córką :) Wszystko naraz?
Generalnie dobrze, że masz tyle zapału i chęci, ale pasuje jeszcze trochę konsekwencji w tym wszystkim.
O ile elektronikę, taką prostą, da się "ukleić" bez większego zrozumienia działania na podstawie znalezionych schematów, to programu za bardzo nie ukleisz.
To czego potrzebujesz nazywa się mikrokontroler.
Tak więc musisz wybrać mikrokontroler (rodzinę jaką na początek chcesz opanować) i język programowania w jakim chcesz program pisać.
Arduino to takie trochę właśnie narzędzie "do klejenia" programu, ale mimo wszystko troszkę nauczyć się trzeba.
Za chwilę arduino zacznie cię ograniczać.
Ja zaczynałem z programowaniem od mikrokontrolerów AVR (Attiny, Atmega, potem xmega) i języka C, to było jakieś 15 lat temu i nadal uważam, że jest to dobra droga, chociaż niektórzy twierdzą, że już niemodna.


atom1477
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 2785
Rejestracja: 21 kwie 2011, 10:58
Lokalizacja: ::

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#9

Post napisał: atom1477 » 21 lis 2023, 20:32

drzasiek90 pisze:
21 lis 2023, 20:06
O ile elektronikę, taką prostą, da się "ukleić" bez większego zrozumienia działania na podstawie znalezionych schematów, to programu za bardzo nie ukleisz
Akurat jest na odwrót, czego dowodzą ostatnie lata popularności różnych płytek Arduino czy ESP8266.
Ludzie piszą programy, a o najprostszych rzeczach hardwareowych nie mają pojęcia.
Widziałem jakiś temat gdzie komuś się jakiś moduł zawieszał, i mu tłumaczyli żeby dodał kondensatory (dał zdjęcie i było widać że ich nie ma). 3 strony tłukli temat, a on w końcu pyta co to jest ten kondensator (nie wiem co robił przez te 3 strony tematu zanim zapytał). Tematów o resetach przy załączaniu przekaźnika nawet nie policzysz. Mimo że ludzie dostają schematy (gasika) to nie potrafią nic z tym zrobić. Nie rozumieją co oznacza schemat, albo nie umieją tego przylutować.

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 7859
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Garść najcenniejszej wiedzy dla początkującego programisty

#10

Post napisał: tuxcnc » 21 lis 2023, 20:58

Rafalgl pisze:
19 lis 2023, 19:46
chciałbym np. umieć zbudować menu, w którym będę mógł powiedzmy jednym enkoderem i 2-3 microswitchami uruchamiać poszczególne funkcje/moduły w swoich projektach, zamiast musieć wiercić 10 otworów pod isostat, kolejne 10 pod ledy sygnalizacyjne a w środku plątanina kabli.
Tylko że w taki sposób niczego się nie nauczysz.
No co najwyżej jak metodą prób i błędów przerobić cudzy program, albo coś sklecić z gównianych bibliotek do Arduino...
Jak było wspomniane powyżej, najpierw musisz wybrać język i procesor.
Ja polecam język C (może być Arduino IDE, ale korzystać tylko z podstawowych funkcji), a jako procesor ATtiny13.
ATtiny13 to najprostszy z procesorów AVR, ma obudowę z ośmioma nogami, kilobajt pamięci flash i wewnętrzny rezonator RC.
Znaczy to, że da się uruchomić układ na samym procesorze baz żadnych elementów zewnętrznych, wystarczy przylutować kabelki do nóżek.
Oczywiście bardziej skomplikowanych urządzeń na tym procesorze nie zbudujesz, ale będziesz musiał nauczyć się korzystać bezpośrednio z rejestrów, co przyda ci się po przesiadce na większe układy.

Tutaj masz przykład prostego programu na ATtiny13

Kod: Zaznacz cały

#define F_CPU 9600000         // clock 9.6 MHz, internal oscillator
volatile int count=0;
#define HOME PB2              // PB2 as HOME output
                              // PB1 as STEP input
                              // PB0 as DIR input
int main(void) {

GIMSK |= _BV (INT0);           // Enable external interrupts INT0
MCUCR |= _BV (ISC01);          // PCINT0 is triggered on rising
MCUCR |= _BV (ISC00);          // PCINT0 is triggered on rising
sei();                         // Global enable interrupts
DDRB |= (1 << HOME);           // Set direction register output
PORTB |= B00000100;            // set HOME to high

for (;;) {                     // loop (endless)
    if (count > 1000){
    PORTB &= B11111011;        // set HOME to low
    }
  }
}

ISR (INT0_vect)                 // INT0 interrupt vector
{
  if  (PINB & B00000001){
    count = 0;
    PORTB |= B00000100;         // set HOME to high
    }
  else{
    count ++;
    }
}


To bardzo pożyteczne urządzenie udające wyłącznik krańcowy, którego używałem do testowania GRBL, ale do Mach3 czy Linuxcnc też by się nadał.
Jak to działa?
Jeśli w zadanym kierunku zostanie zliczone 1000 impulsów step, to zostanie wystawiony sygnał udający zadziałanie krańcówki, natomiast jeśli zmieni się kierunek (sygnał DIR) to licznik zostanie wyzerowany a sygnał krańcówki ustawiony w stan nieaktywny.
Oczywiście nic z tego nie rozumiesz i nie ma szans żebyś zrozumiał bez poznania wewnętrznej budowy mikroprocesora, ale dopóki nie zrozumiesz i się nie dowiesz, to sobie odpuść.
Oczywiście do jakichś trywialnych programików opartych na gotowych bibliotekach duża wiedza potrzebna nie jest, nawet dzieci sobie z tym radzą, ale trudno to nazwać programowaniem...

Dodane 4 minuty 56 sekundy:
atom1477 pisze:
21 lis 2023, 20:32
Ludzie piszą programy, a o najprostszych rzeczach hardwareowych nie mają pojęcia.
Widziałem jakiś temat gdzie komuś się jakiś moduł zawieszał, i mu tłumaczyli żeby dodał kondensatory (dał zdjęcie i było widać że ich nie ma). 3 strony tłukli temat, a on w końcu pyta co to jest ten kondensator (nie wiem co robił przez te 3 strony tematu zanim zapytał). Tematów o resetach przy załączaniu przekaźnika nawet nie policzysz. Mimo że ludzie dostają schematy (gasika) to nie potrafią nic z tym zrobić. Nie rozumieją co oznacza schemat, albo nie umieją tego przylutować.
Formalnie masz rację, ale co próbujesz w ten sposób udowodnić?
Że można być nieukiem i ignorantem, a coś czasem zadziała?

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Arduino, Raspberry pi i inne systemy mikroprocesorowe”