• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Szukam mikrokontrolera...
#1
Witam, 
potrzebuje do mojego nowego projektu mikrokontroler, który będzie znacznie potężniejszy niż np. jakakolwiek Atmega. Generalnie chciałbym, aby dało się go programować z Arduino IDE, ale w ostateczności (o ile inne środowisko będzie miało dobrą dokumentację) to mogę spróbować czegoś nowego. Teraz najważniejsza sprawa czyli parametry - musi być 32-bitowy, taktowanie powyżej ~150MHz, pamięci flash ile by nie było, starczy (dosłownie kilka KB), pamięci SRAM min. 128KB, napięcie pracy 3.3V i ważne, aby był możliwy do przylutowania przeze mnie (wchodzi w grę SMD z rastrem pinów >=0.5mm. BGA odpada). Jeszcze jedna sprawa, mikrokontroler musi mieć przynajmniej 1 "nie wybrakowany" port i wystarczy mi ten jeden ale pewnie takie mikrokontrolery są rzadkością.

Liczę na pomoc, pozdrawiam!
 
Odpowiedź
#2
Zainstaluj STMfinder.
 
Odpowiedź
#3
Może być ESP32? Są gotowe moduły do przylutowania, ale jest to moduł z osobnym flash i wszystkim co mu tam jest potrzebne. IO musisz sobie dokładnie pooglądać, tak by nie próbować wykorzystywać tych już podłączonych do flash, bo te są wyprowadzone na wypadek, gdyby ktoś chciał podłączyć kolejny flash.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#4
(07-05-2020, 12:59)kaczakat napisał(a): Może być ESP32? Są gotowe moduły do przylutowania, ale jest to moduł z osobnym flash i wszystkim co mu tam jest potrzebne. IO musisz sobie dokładnie pooglądać, tak  by nie próbować wykorzystywać tych już podłączonych do flash, bo te są wyprowadzone na wypadek, gdyby ktoś chciał podłączyć kolejny flash.
Mogło my być o ile moc będzie wystarczająca. Jeśli chodzi o zewnętrzne pamięci to spoko o ile dostęp do do nich będzie naprawdę szybki. Dla przykładu odczyt 128KB z pamięci SRAM nie może zajmować więcej niż jakieś 70ms a to krótko. A wiesz jakie są polecenia zamiast DDR i PORT? (są to polecenia sterowania portami np. w Arduino UNO)
 
Odpowiedź
#5
ESP nie musisz programować w Arduino. RAM jest wewnętrzny, tylko flash jest zewnętrzny. Ale są też wersje z 4MB dodatkowo zewnętrznego RAM -WROVER. Są dwa rdzenie i to co jest używane w Arduino ma firmware oparty o RTOS. Pewnie chodziło Ci o 70ns. Tak do końca nie jesteś w stanie zapanować nad tym co robi jeden z rdzeni, bo ma swoje zadania i np. w ESP8266 jak na dłużej zablokowało się uC swoimi pętlami to WDG go resetował. W ESP dotyczy to jednego z rdzeni.
Wiele więcej Ci nie powiem, ja tego używam jak jaskiniowiec siekiery, głównie do migania led i kolekcjonowania danych na zewnętrznym serwerze.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
(07-05-2020, 16:15)kaczakat napisał(a): ESP nie musisz programować w Arduino. RAM jest wewnętrzny, tylko flash jest zewnętrzny. Ale są też wersje z 4MB dodatkowo zewnętrznego RAM -WROVER. Są dwa rdzenie i to co jest używane w Arduino ma firmware oparty o RTOS. Pewnie chodziło Ci o 70ns. Tak do końca nie jesteś w stanie zapanować nad tym co robi jeden z rdzeni, bo ma swoje zadania i np. w ESP8266 jak na dłużej zablokowało się uC swoimi pętlami to WDG go resetował. W ESP dotyczy to jednego z rdzeni.
Wiele więcej Ci nie powiem, ja tego używam jak jaskiniowiec siekiery, głównie do migania led i kolekcjonowania danych na zewnętrznym serwerze.
Znaczy chodziło mi o to że odczyt całości (128Kb) ma trwać około 70ms. Mówisz że nie mam pełnego panowania - to znaczy, że jak będę podawał bardo krótkie impulsy rzędu kilku ns to te przebiegi mogą być niestabilne? Tnz np. jak bym zrobił sterowanie linią zegarową, która musi dostawać (w moim przypadku) 12Mhz to te przebiegi mogą być niestabilne? (czyli np. wypełnienie by się zmieniało lub częstotliwość) Bo jeśli tak no to średnio to widzę jak matryca LCD dostaje sygnał o niestabilnej częstotliwości...
 
Odpowiedź
#7
Aha jeszcze jedno pytanko: skoro STM32 ma 2 rdzenie to teoretycznie jest wielozadaniowy a ja właśnie czegoś takiego szukam. Wiesz może czy jest w ogóle to możliwe aby 1 rdzeń wykonywał 1 prostą cykliczną rpacę a drugi robił w tym czasie zupełnie coś innego?
 
Odpowiedź
#8
STM, STM32 i ESP32 to różne rodziny uC. Pewnie są jakieś STM dwurdzeniowe, ale ja się nimi średnio interesuję. Z ESP32 właśnie tak się robi i jest sporo przykładów jak to wykonać, tylko trzeba uważać, tak by rdzeń główny nie był obciążony w 100%. Poza tym każdy uC jest wielozadaniowy, natomiast w jednordzeniowym masz pewność, że jak masz w loop instrukcje jedna po drugiej, to zostaną zrobione w tej kolejności. Przy wielu rdzeniach ESP32 trzeba się zagłębić w RTOS jeśli operacje w rdzeniach są ze sobą powiązane.
W sumie to ESP32 ma trzy rdzenie, trzeci to jakiś ultra low power działający na wybranych pinach i mający własny RAM, można go użyć do przechowania danych na czas uśpienia. ESP ma tą dziwną/ułomną właściwość, że by go wybudzić (z najoszczędniejszego trybu) trzeba go zresetować. AVR nawet po power down rusza z miejsca gdzie go uśpiono z całą zawartością programu.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#9
(07-05-2020, 19:57)kaczakat napisał(a): STM, STM32 i ESP32 to różne rodziny uC. Pewnie są jakieś STM dwurdzeniowe, ale ja się nimi średnio interesuję. Z ESP32 właśnie tak się robi i jest sporo przykładów jak to wykonać, tylko trzeba uważać, tak by rdzeń główny nie był obciążony w 100%.  Poza tym każdy uC jest wielozadaniowy, natomiast w jednordzeniowym masz pewność, że jak masz w loop instrukcje jedna po drugiej, to zostaną zrobione w tej kolejności. Przy wielu rdzeniach ESP32 trzeba się zagłębić w RTOS jeśli operacje w rdzeniach są ze sobą powiązane.
W sumie to ESP32 ma trzy rdzenie, trzeci to jakiś ultra low power działający na wybranych pinach i mający własny RAM, można go użyć do przechowania danych na czas uśpienia.  ESP ma tą dziwną/ułomną właściwość, że by go wybudzić (z najoszczędniejszego trybu) trzeba go zresetować. AVR nawet po power down rusza z miejsca gdzie go uśpiono z całą zawartością programu.
1. Co to znaczy że rdzeń będzie obciążony w 100%? Nie za bardzo to rozumiem bo gdy mikrokontroler kończy jakieś zadanie to po prostu zaczyna następne - więc praktycznie ciągle jest zajęty.
2. A masz jakieś dobre przykłady multitaskingu w ESP32? Bo generalnie chciałbym z jednego rdzenia nadawać ciągły sygnał do wyświetlacza LCD (który tego wymaga) a na drugim wykonywać różnorakie czynności. Nie za bardzo wyobrażam sobie jak to zapisać, że te polecenia są dla rdzenia 0 a te dla 1 i jeszcze żeby wykonywało się to jednocześnie. Ja sobie to wyobrażałem tak, że są jakby 2 programy oddzielnie dla rdzeni, ale pewnie wygląda to trochę inaczej.
 
Odpowiedź
#10
Jakakolwiek pętla nieskończona gdzie raz stawiasz na pin 0 potem 1 i masz obciążenie 100%. W ESP wystarczy dać delay(0) i wtedy jest przeskok do zadań typu zerowanie WDG, obsługa WIFI. Ale też nie będzie tak, że zmiana stanu IO następuje z pełną prędkością, raz pauza tak ile wywołanie pustej funkcji, a raz tyle ile ma się zadziać w ESP. Tak samo na końcu loop. Dlatego w Arduino nie da się zaplanować każdego taktu zegara tak do końca.
Nic nie polecę z przykładów. Zapytanie w Google, ctrlC i ctrV, przetestowałem, fajne, warto kiedyś wrócić i na razie czeka.  I tak trzeba zacząć od zakupu, albo pooglądać testy porównawcze prędkości. Kiedyś była fajna tabelka, gdzie porównano wszystkie typowe funkcje Arduino, obliczenia na float, int32, int8, stronka znikła, ale wyrwałem z niej excela i szkic testowy. Możesz sobie otworzyć i porównać. Np. Tensy 3.6 z ARM o tym samym zegarze wypada znacznie lepiej przy dzieleniu float, w większości jest podobnie - oczywiście testowany 1 rdzeń. Niestety cena x5 względem ESP32.


Załączone pliki
.zip   ArduinoSpeedTest.zip (Rozmiar: 31.16 KB / Pobrań: 1)
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości