Skocz do zawartości
RFM

Czy i ewentualnie dlaczego Arduino jest złe?

Pomocna odpowiedź

Od administratora: poniższy post został wydzielony z tego tematu: https://forbot.pl/forum/topic/16963-prasowka-ciekawostki-o-elektronice-i-programowaniu/ (jako odpowiedź na informację o nowym Arduino IDE).

----------

O JTAG i SWD pisze jakiś użytkownik/tester z czego wynika, że debugowanie nie działa (ma błędy) a jakie interfejsy obsługuje trzeba sprawdzić w nowym środowisku (jego dokumentacji).

Biorąc pod uwagę, że do debugowania, wymagany jest interfejs, oraz to, że specyfikacja DebugWire nie jest dostępna, nie ma szans aby debugowanie zadziałało na ArduinoUNO czy ArduinoMEGA. Nie wiem co "miesza" bootloader w AVR z debugwira ale w AVR z JTAG, po amatorsku wyłączany jest JTAG. Jeśli więc nawet podłączyć JTAG do ArduinoMEAG to i tak nie zadziała. Dlaczego twórcy bootloadera wyłączają JTAG? Jaki byłby problem aby JTAG wyłączyc programowo choćby w sekcji init ?

Poprawiałem już projekty po amatorach, w AVR z JTAG wyłączony był on w fuses a nie programowo. Arduino robi dokładnie tak samo co potwierdza moje odczucia, że to zabawka. AVR ma swoje ograniczenia a twórcy Arduino jeszcze "dobijają" biednego AVR niepotrzebnymi operacjami zmiennoprzecinkowymi, klasami string itp. Twórcy AVR-GCC też się nie popisali. Często niepotrzebnie w przerwaniu odkładają na stos R0, R1, zerują R1.

	"push	r1		\n\t"
	"push	r0		\n\t"
	"in	r0, 0x3f	\n\t"	// SREG
	"push	r0		\n\t"
	"eor	r1, r1	\n\t"
      
      
      
      
	"pop	r0		\n\t"
	"out	0x3f, r0\n\t"
	"pop	r0		\n\t"
	"pop	r1		\n\t"      
    "reti"

Taki kod w przerwaniu znajduje się zawsze, bez względu na to, czy przechowywanie R0, R1 a czasem i SREG jest potrzebne czy nie. R1 nieszczęśliwie wybrali do przechowywania liczby zero jakby nie było innych rejestrów. Dlaczego nieszczęśliwie? Bo R0 i R1 są używane w operacji sprzętowego mnożenia. Gdyby zamiast R1 wybrać np R14 nie trzeba by w przerwaniu odkładać go na stos, zerować (bo mnożenie może go zmienić), zdejmować ze stosu. Niby to tylko 9 rozkazów ale trzeba pamiętać, że POP i PUSH wykonują się w 2 cykle, więc owe 9 rozkazów to 15 cykli maszynowych. Przy 16MHz to tylko (czasem aż) prawie 1us. Przy wejściu w przerwanie, mamy czasem niepotrzebna stratę 0,5us. Czy to dużo czy mało? Jak chce się zaemulować slave 1-Wire w trybie overdrive to bardzo dużo. Musiałem dużo się namęczyć aby to zrobić i wtedy stwierdziłem, ze definitywnie odchodzę od AVR na rzecz ARM.

Kiedy jeszcze te us są problemem? Np gdy trzeba zrobić pseudo wielopoziomowe przerwania. Problemem jest przerwanie odbiorcze od UART. Nie można tak po prosu, włączyć przerwań (rozkaz SEI) zaraz po wejściu w nie co robią "INTERRUPT()" i "ISR(_ISR_NOBLOCK"). Dlaczego można doczytać sobie dokumentacji AVR. Aby w miarę szybko włączyć przerwania przy odbiorze danych z UART trzeba wspomóc sie wstawką ASM

#ifdef	INT_WS_NAKED
ISR( USART1_TX_vect, ISR_NAKED )
{
//PORTB |= _BV(PB4);
//Wywalona operacja na niewużywanym R1 (-4 rozkazy) i R0 (-6 rozkazów)
asm volatile (
//	"push	r1		\n\t"
//	"push	r0		\n\t"
//	"in	r0, 0x3f	\n\t"	// SREG
//	"push	r0		\n\t"
//	"eor	r1, r1	\n\t"
	"push	r18		\n\t"
//SREG na stos przy użyciu używanego później R18 (+3)
//Łączna oszczędność 7 rozkazów/cykli *-4-6)+3 ma dość duże znaczenie z racji bardzo częstego wywoływania przerwań
	"in	r18, 0x3f	\n\t"	// SREG
	"push	r18		\n\t"
//Dalej jak wcześniej
	"push	r24		\n\t"
	"push	r25		\n\t"
	"push	r30		\n\t"
	"push	r31		\n\t"
	);
#else
ISR( USART1_TX_vect )
{
#endif
//PORTB |= _BV(PB4);

	if ( pozScr ){ UDR1 = *(PtrScr+pozScr++); }
	if ( pozScr >= SCRLEN ){ pozScr=0 ;FL_TransEnd=true; }


#ifdef	INT_WS_NAKED
asm volatile (
	"pop	r31		\n\t"
	"pop	r30		\n\t"
	"pop	r25		\n\t"
	"pop	r24		\n\t"
//Dodane SREG przy użyciu R18
	"pop	r18		\n\t"
	"out	0x3f, r18\n\t"
//Dalej normalnie R18
	"pop	r18		\n\t"
//Wywalone operacje na R0 i R1
//	"pop	r0		\n\t"
//	"out	0x3f, r0\n\t"
//	"pop	r0		\n\t"
//	"pop	r1		\n\t"
	);
//PORTB &= ~_BV(PB4);
	reti();
#endif
//PORTB &= ~_BV(PB4);
}

Właśnie takie karkołomne sztuczki, brak DMA i co ważne wysoka cena AVR w stosunku do ARM, spowodowała, ze pożegnałem się z AVR.

Kod może komuś się przyda gdy będzie chciał np wysyłać dane do LED WS2812 w przerwaniach a na drugim UART odbierać transmisję DMX, co jest niełatwe ale wykonalne, bo mnie udało się to zrobić.

Udostępnij ten post


Link to post
Share on other sites

Dyskusja może skręcić w stronę odbiegającą od głównego tematu, więc post wydzieliłem do osobnego tematu. Źródło powyższej wiadomości: https://forbot.pl/forum/topic/16963-prasowka-ciekawostki-o-elektronice-i-programowaniu/ Tutaj będzie można na spokojnie dyskutować 🙂

--

2 godziny temu, RFM napisał:

Arduino robi dokładnie tak samo co potwierdza moje odczucia, że to zabawka.

Nie ma rozwiązań idealnych. Arduino musiało pójść na jakieś ustępstwa, aby produkt był dostosowany dla mas i to się niewątpliwe im udało. Warto też pamiętać, że nikt nie szykował Arduino jako globalny produkt. Pierwotnie to miała być platforma używana prze studentów na jednej uczelni 😉

Udostępnij ten post


Link to post
Share on other sites
19 minut temu, Treker napisał:

Dyskusja może skręcić w stronę odbiegającą od głównego tematu,

Fakt, że to co napisałem, to poradnik jak wycisnąć na max AVR. Niestety, bez znajomości ASM i dokumentacji kompilatora moje porady nie przydadzą się a nawet "wysypią" program (niezachowany na stosie rejestr używany w przerwaniu, zdjęcie innej liczby danych ze stosu niż odłożono, zdjęcie w innej kolejności (od końca) niż odkładano. Pewnie to o czym piszę to dla większości arduinowców "czarna magia", bo nie wiedzą co to stos, do czego służy a sztuczki z podmiana adresu powrotu to raczej już nie zrobią.

Ze względu na to, ze wycofałem sie z AVR mogę dac przydatną funkcję, przy czym na 100% działa na Mega2560, czy na mniejszych nie pamiętam (wydaje si ę że tak) ale najpierw:

ISR(BADISR_vect)
{
	
}

Jak tu wskoczy program, to wiadomo, że wektor przerwania nie jest obsłużony. Którego? Niestety, AVR kasuje przerwanie w chwili wejścia w nie, więc nie wiadomo, chyba, że jest to przerwanie odbiorcze od UART. INT (ale nie PCINT) też łatwo stwierdzić.

Poniżej obiecany kod:

//----------------------------------------------------------------------//
// WDIE jest automatycznie kasowany dlatego następne zadziałanie WDG	//
//   wywoła reset														//
//----------------------------------------------------------------------//
#if defined(__AVR_ATmega164__) || defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) || \
			defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || \
			defined(__AVR_ATtiny167__)
#ifndef WDGI_NONAKED
  ISR(WDT_vect, ISR_NAKED )
#else
  SIGNAL( WDT_vect )
#endif
{
byte *ptr, ofs=0, adr[3];
word stack, cmd;
#if  defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
  long vect;							// Ponad 128K adres jest trzybajtowy
#else
  word vect;
#endif

	#ifdef WDGI_NONAKED
	  nop();							// Pierwszy rozkaz procedury (kod maszynowy rozkazu = $0000)
	#endif
	vect = WDT_vect;					// Adres wektora przerwania od WGD
	vect <<= 1;							// Adres w słowach więc mnożymy przez 2

	#ifdef WDGI_NONAKED
	  for( byte x=0; x<32; x++ )		// Liczymy liczbe rozkazów push
		{
		#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
		  cmd = pgm_read_word_far(vect);// Ponad 64KB "far"
		#else
		  cmd = pgm_read_word( vect );
		#endif
		vect +=2;
		if ( !cmd )	break;				// Jeśli kod rozkazu "nop"
		if ( ((cmd&0xFF00)==0x9200) ||	// Jeśli rozkaz push R0..15
			 ((cmd&0xFF00)==0x9300) )	// Jeśli rozkaz push R16..31
			{
			ofs++;
			}
		}
	#endif

	stack = SP + ofs;
	stack++;			// Stos wskazuje pierwszy wolny bajt więc zwiększamy o 1
	ptr = stack;
	adr[0] = *ptr++;
	adr[1] = *ptr++;
	adr[2] = *ptr++;
	#if  defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
	  adrCallWdg = ((adr[0] << 8) <<8);	// Adres powrotu dla cpu ponad 128kB
	  adrCallWdg |= adr[1] << 8;
	  adrCallWdg |= adr[2];
	#else
	  adrCallWdg = adr[0] << 8;			// Adres powrotu dla cpu do 128kB
	  adrCallWdg |= adr[1];
	#endif
	adrCallWdg *= 2;					// PC wskazuje nr słowa więc adres jest dwa razy większy


	if ( adrUserCallWdg )
		{
		long adrCall = adrUserCallWdg >> 1;	// Rozkaz CALL posługuje się słowami a nie adresem
		(*((void(*)(void))adrCall))();		// CALL do funkcji o adresie "adrUserCallWdg"
		}


#ifndef WDGI_NONAKED
  while( true ) nop();	// "abort()" nie zadziała (wyłącza irq czy wdg - nie pamiętam)
#endif
}
#endif

przydaje się gdy używany jest watchdog. Wystarczy włączyć przerwania od niego i gdy zadziała można stwierdzić gdzie program kręcił się w kółko.

 

Udostępnij ten post


Link to post
Share on other sites

Poradnik ciekawy aczkolwiek jak sam zauważyłeś przedstawiasz jak coś zrobić na max  możliwości więc niema co się dziwić , że będzie to czarna magia bynajmniej do jakiegoś czasu (albo i dłużej) dla osób , które na co dzień korzystają z arduino IDE raptem od roku czy dwóch traktując to jako hobby. Jeżeli ktoś będzie chciał poznaj lepiej avr  to zawsze może kupić ATMEGA328PB-XMINI. Zestaw kosztuje połowę ceny "genuine" arduino uno a ma dodatkowo zintegrowany debugger z pełnym wsparciem dla Atmel Studio od wersji 6.2 (aktualna chyba 7.0). Zgodzę się , że i tak jest to drożej niż za zestaw stm (który będzie o wiele szybszy) ale jeżeli ktoś nie potrafi w pełni wykorzystać takiego uno to jaki jest cel sięgania po coś szybszego ? Moim zdaniem lepiej nauczyć się jak działa zabawka i poznać jej ograniczenia a dopiero później spróbować czegoś szybszego. Można by to zajść od drugiej strony i zapytać : po co uczyć się zabawki skoro można zacząć od stm ? Zależy co do kogo bardziej trafia co łatwiej jest zrozumieć. Opisz jakiś DIY oparty na stm (ale tak od A do Z) , krótki prosty (przez prosty rozumiem taki który będzie zrozumiały dla każdego) ale niewykonalny na avr. W taki sposób z pewnością przekonasz kogoś do stm. 

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Ciekawe co znaczy że "Arduino jest złe"? Każdy się czasem zezłości, ale żeby płytki przeznaczone do nauki programowania się złościły na kogokolwiek to pierwsze słyszę.

Chociaż z drugiej strony TensorFlow jest już na Andruino dostępny, więc może nie tylko wykazuje sztuczną inteligencję, ale i emocje potrafi okazywać. W sumie ciekawy temat, mam nadzieję że autor wątku wyjaśni co miał na myśli pisząc o złości wykazywanej przez Arduino. No i mam nadzieję, że ta złość nie wynika z ciągłego narzekania na ten poniekąd popularny produkt 🙂

Udostępnij ten post


Link to post
Share on other sites
22 minuty temu, Elvis napisał:

Ciekawe co znaczy że "Arduino jest złe"? Każdy się czasem zezłości, ale żeby płytki przeznaczone do nauki programowania się złościły na kogokolwiek to pierwsze słyszę.

Akurat nazwa tematu jest "moja" i nadałem ją roboczo podczas wydzielania postu ze źródłowego tematu 😉 Czekam na propozycje lepszej nazwy - chętnie poprawię.

Udostępnij ten post


Link to post
Share on other sites

Co to znaczy Arduino? Jeśli wziąć pod uwagę Arduino jako hardware to moim zdaniem jest to bardzo dobra baza sprzętowa dla rozpoczynających zabawę z mikrokontrolerami. Gotowy moduł, żadnych pająków, wielość "kompatybilnych" rozszerzeń, bogactwo dokumentacji i przykładowego oprogramowania .... Czego więcej chcieć. Jeśli zaś mowa o środowisku Arduino IDE to jak dla mnie początkującego to także ciekawa propozycja, która znacząco ułatwia okiełzanie tego modułu. Osoby, które się "wkręcą" w tę tematykę same szybciutko dochodzą do wniosku, że trzeba zajrzeć do datasheet ATmegi i doposażyć się w bardziej zaawansowaną literaturę niż Arduino Reference z arduino.cc

Jak dla mnie Arduino to świetna propozycja na dobry start.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@RFM 

Cóż, wg. mnie jednocześnie masz rację i jej nie masz. Faktycznie ekipa ( a właściwie ekipy) pracujące nad opisaniem AVR w niektórych miejscach się nie popisały bądź przestali rozwijać niektóre rozwiązania ale nie czepiałbym się tak wszystkiego. Te wszystkie zbędne operacje nie mają sensu kiedy się z nich nie korzysta ale nie można zaprzeczyć, że w znacznym stopniu ułatwiają i przyspieszają pisanie więc jest to kwestia wyboru dla bardziej wtajemniczonych i wygody dla początkujących. Jeśli chodzi o 8 bitowe uC to w zestawieniu z nowinkami technicznymi uważam, że tylko dzięki takim właśnie ułatwieniom mają szansę przetrwać i to dobrze. Źle z tego względu, że fakt faktem utrudniają optymalizację własnych projektów nie wskazując nawet na taką możliwość  na co słusznie zwróciłeś uwagę. Ale tak jak wspomniałem to nie zawsze źle. Np. odkładanie na stos rejestrów R0 i R1 w niektórych przypadkach ( być może nielicznych ale jednak) ma sen ponieważ może zajść możliwość wystąpienia przerwania tuż przed skorzystaniem z tych rejestrów "manualnie" i gdyby nie były zapisane byłby to ewidentny błąd dlatego takie właśnie jest domyślne zachowanie kompilatora szczególnie kiedy w projekcie występują przerwania typu NOBLOCK lub kiedy użytkownik sam odblokuje system przerwań w funkcji przerwania. Takie błędy są ciężkie do wykrycia kiedy aplikacja jest znacznych rozmiarów a do tego zawiera wstawki asm i różne konwencje gdzie w każdej z dołączonych bibliotek może być inna... i szukaj wtedy błędu na piechotę.

Tak czy inaczej 8bitowce przyszłość mają jedynie jako pomoce naukowe z wyjątkiem może jedynie attiny85 które się świetnie nadają jako odciążenie głównego procesora w jakichś większych projektach lub jako kontroler drobnych urządzeń ze względu na gabaryty poza tym fakt faktem bardziej się opłaca nawet ze względu na samą cenę stosować army zamiast avrów typu mega32 itp. Nie można tu też zapominać o być może najważniejszej kwestii - niektórzy kochają 8bitowe AVRy i doskonale ich rozumiem. Więc zamiast marudzić, jeśli jesteś w stanie poprawić coś w AVR-libC to nie krępuj się i wrzuć to na gita, docenimy ściągalnością :)

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
2 godziny temu, slon napisał:

Opisz jakiś DIY oparty na stm (ale tak od A do Z) , krótki prosty (przez prosty rozumiem taki który będzie zrozumiały dla każdego) ale niewykonalny na avr. W taki sposób z pewnością przekonasz kogoś do stm. 

Nie ma opcji. Dużo roboty wynagrodzenie = 0. Więcej ni z na forach o projektach pisze w EdW. W EP raczej są cięcia i trzeba szukać w materiałach dodatkowych do artykułu.  Nie ma problemu aby w EdW czy EP pojawił się mini kurs opisujący jakieś zagadnienie ale to zależy od czytelników a tym nie chce się wypełniać ankiet czy pisać e-maili do redakcji. A moze czasopisma nie są czytane? Jeśli tak, to skąd bierze się sprzedaż? Skąd kolejne prenumeraty?

 

1 godzinę temu, Elvis napisał:

Arduino zdobyło ogromną popularność dzięki prostocie użycia

Cały czas tą "prostotę" widzę. Ostatnio w banalnym określeniu kiedy można przełączyć kierunek drivera RS485. Widzę za to idiotyzmy, jak wyświetlacz 480x320, na którym obrazek animuje się "tylko" 12 sekund! Lekko licząc 400 razy za wolno! Po co w ogóle takie projekty? Chyba tylko po to abym mógł zrobić akcelerator do wyświetlacza, bo na tyle spodobał się wersja 128x128, że mam zamówienie na 320x240 i 480x320.

 

1 godzinę temu, Elvis napisał:

nikt nie może zaprzeczyć, że dzięki niemu wiele osób rozpoczęło przygodę z elektroniką oraz informatyką,

Zgodzę się.

1 godzinę temu, Elvis napisał:

pozwoliło wielu konstruktorom-amatorom zrealizować ich plany i projekty.

Bardzo często nie do końca. Niektórzy polegli już na starcie http://forum.arduinopolska.pl/watek-arduino-ledy-ws2812b bo nie sięgnęli po kalkulator. W tym przypadku może pomóc https://forum.atnel.pl/post222192.html#p222192 kolejna sprzętowa łatka na AVR. Zamiast łatek, można od razu zrobić to na STM32 ale wielokrotnie początkujący marnotrawią moc CPU przez delay czy programowe interfejsy 1-Wire i inne tego typu "wynalazki" powszechnie stosowane w bibliotekach Arduino. Gdy nie wykorzysta się sprzętu, zadanie nie jest wykonywane szybciej o czym można poczytać https://www.elektroda.pl/rtvforum/topic3588785.html Ten problem dotyczy także RPi o czym przekonałem się robiąc http://es2.noip.pl/rpi. Jak gdzie w nazwie biblioteki jest Adafruit  to raczej trzeba traktować to jako demo.

 

1 godzinę temu, atMegaTona napisał:

Np. odkładanie na stos rejestrów R0 i R1 w niektórych przypadkach ( być może nielicznych ale jednak) ma sen ponieważ

Gdy operuje na GPIO ma sens? Jaki? W takiej sytuacji nawet SREG nie trzeba zapamiętywać na stosie.

 

1 godzinę temu, atMegaTona napisał:

Tak czy inaczej 8bitowce przyszłość mają jedynie jako pomoce naukowe

Tak jak niegdyś (na niektórych uczelniach nadal) 8051.

 

1 godzinę temu, atMegaTona napisał:

wyjątkiem może jedynie attiny85 które się świetnie nadają jako odciążenie głównego procesora w jakichś większych projektach

To co można zrobić na tiny85, bez problemu można zrealizować na "głównym" uC, chyba, ze ktoś nie potrafi dobrze wykorzystać możliwości uC. od kiedy uzywam STM32, nie wspomagam się dodatkowymi. Pomijam przypadek Wi-Fi, BT, GSM, bo do tego sa wymagane konstrukcje z wbudowanym RF.

 

1 godzinę temu, atMegaTona napisał:

lub jako kontroler drobnych urządzeń ze względu na gabaryty

SMT32, LPC w obudowach 8-pin są. jedyna przewaga AVR to obudowa 6 pin i szeroki zakres napięć zasilających. 

 

1 godzinę temu, atMegaTona napisał:

niektórzy kochają 8bitowe AVRy i doskonale ich rozumiem.

Masz na myśli Mirka K.?

W moim przypadku rozsądek i niemoc AVR wzięły górę nad miłością. Jedyne czego żałuję, to że w poprzedniej pracy, nie udało mi sikę "przepchnąć" tematu STM32. Przez to jestem opóźniony w STM o jakieś 15 lat mimo, że pierwsze projekty na LPC robiłem ok 2006 roku, później jeszcze w 2010, nowsza wersja 2013 ale nazwałbym to epizodem w stosunku do liczby projektów na AVR.

 

1 godzinę temu, atMegaTona napisał:

Więc zamiast marudzić, jeśli jesteś w stanie poprawić coś w AVR-libC to nie krępuj się i wrzuć to na gita, docenimy ściągalnością 🙂

Nie mam zamiaru zajmować się reanimowaniem trupa. Szkada, życia, chyba, ze znajdzie się zleceniodawca, wtedy ok, zapiera się, zrobię. Zapłaci za to jakieś dwa razy więcej niż za projekt na ARM (liczy się czas pracy) ale nasz klient, nasz pan.

 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Wydaje mi się, że ta cała dyskusja zupełnie nie ma sensu, przecież nikt nikomu nie każe używać AVR. Jak ktoś chce to może, ma takie prawo, a jak nie chce - to nie, jego wybór.

Chciałbym natomiast podkreślić że Arduino to znacznie więcej niż Arduino Uno i atmega328.

Edytowano przez Elvis
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
55 minut temu, RFM napisał:
2 godziny temu, atMegaTona napisał:

Tak czy inaczej 8bitowce przyszłość mają jedynie jako pomoce naukowe

Tak jak niegdyś (na niektórych uczelniach nadal) 8051.

Mylicie się obydwaj, 8 bitowce były są i będą używane, nie mówię tu tylko o AVRach, ale o wszystkich 8bitowcach. Będzie tak ze względu na prostotę i koszt finalny produktu. Widzę jak w każdej byle pierdółce jest jakiś mikrokontroler, wcale to nie są 32 -bitowe mikrokontrolery bo one są niepotrzebne i zbyt drogie. W byle elektronicznym sprayu, który kontroluje silniczek, mierzy światło i odlicza czas pomiędzy kolejnymi psiknięciami. W kartach grających, te wszystkie czarne plamy na płytce to w 99% mikrokontroler 8 bitowy. One są już na tyle upowszechnione i tanie, że pcha się je do wszystkiego.

 

1 godzinę temu, RFM napisał:
2 godziny temu, atMegaTona napisał:

niektórzy kochają 8bitowe AVRy i doskonale ich rozumiem.

Masz na myśli Mirka K.?

W moim przypadku rozsądek i niemoc AVR wzięły górę nad miłością. Jedyne czego żałuję, to że w poprzedniej pracy, nie udało mi sikę "przepchnąć" tematu STM32. Przez to jestem opóźniony w STM o jakieś 15 lat mimo, że pierwsze projekty na LPC robiłem ok 2006 roku, później jeszcze w 2010, nowsza wersja 2013 ale nazwałbym to epizodem w stosunku do liczby projektów na AVR.

Ja mam inne zdanie na ten temat, robiłeś to za co dostawałeś pieniądze. Był popyt na AVRy to robiłeś wszystko na AVRach. A tak się składa, że w Polsce AVRy stały się bardzo popularne i to nie za sprawą Arduino. W EdW promowany był Bascom 2051 i to od początku, później Bascom AVR, nie bez powodu dla Polski powstało demo Bascoma z kodem nie do 2kB, jak dla całego świata, a do 4kB. To zasługa wielkiej popularności Bascoma w Polsce. Sam uczyłem się elektroniki od 1 numeru EdW.

Popularność AVRy zawdzięczają tylko i wyłącznie prostocie użycia, niskiej cenie (na początku kosztowały dużo mniej niż teraz, potem nagle ceny AVRów poszybowały w górę) oraz co najważniejsze rosnącej społeczności, która tworzy kody (co jest jednocześnie ogromną zaletą jak i wadą, ale to już temat na kiedy indziej) więc każdy, dosłownie każdy może kupić Arduino i w mniej niż 5 minut ściągnąć gotowiec i go użyć. W tym aspekcie żaden STM czy inny 32bitowy mikrokontroler nie przebije AVRów.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
Przed chwilą, Sabre napisał:

Będzie tak ze względu na prostotę i koszt finalny produktu.

Dawno nie widziałem nowego projektu z Z-80, 6502, 68xx a jeśli mowa o uC a nie CPU to Z-8, (symboli jedno układowych 65xx i 68xx nie pamiętam).

 

7 minut temu, Elvis napisał:

Chciałbym natomiast podkreślić że Arduino to znacznie więcej niż Arduino Uno i atmega328.

Na szczęście są i STM32 (choćby NUCLEO, DISCOVERY) jak i inne ale przyjęło się, od strony sprzętu Arduino = ArduinoUNO z mega328 tak jak gdy mowa o programowaniu ISP AVR to, ze jest to SPI a może przecież być JTAG, bootloader a ten po I2C czy  USB.

 

6 minut temu, Sabre napisał:

wcale to nie są 32 -bitowe mikrokontrolery bo one są niepotrzebne i zbyt drogie.

Na razie. STM32 w obudowie 8 pin sa po chyba 30 centów.

7 minut temu, Sabre napisał:

W byle elektronicznym sprayu, który kontroluje silniczek, mierzy światło i odlicza czas pomiędzy kolejnymi psiknięciami. W kartach grających, te wszystkie czarne plamy na płytce to w 99% mikrokontroler 8 bitowy.

Akurat w szczotece do zębów był STM32. Ciekawe dlaczego? Bo był drogi?

9 minut temu, Sabre napisał:

która tworzy kody (co jest jednocześnie ogromną zaletą jak i wadą, ale to już temat na kiedy indziej)

Niby dlaczego na później? To jest luźny temat, może pisać prawie co się chce.

10 minut temu, Sabre napisał:

niskiej cenie (na początku kosztowały dużo mniej niż teraz, potem nagle ceny AVRów poszybowały w górę)

Raczej ARM staniały. AVR wykonywane są w starej, drogiej technologii. Nie ma sensu jej zmieniać bo to koszty a 8-bit powoli umiera. Ostatnio jest "wysyp" 32-bit płytek Arduino i dobrze. Pytanie, czy nowe ArduinoIDE będzie dobrze obsługiwać debuger? Czy powstaną lepsze biblioteki choćby dla LCD używające DMA? Jak nie, to czy 16MHz czy 480 a nawet 600MHz, szybkość wykonywania kodu nie zwiększy się bo CPU będzie kręcie się w delay czy while(czekam_na_coś).

14 minut temu, Sabre napisał:

robiłeś to za co dostawałeś pieniądze

Tak, to ja wybierałem uC czy CPLD. Ileż to razy wspomagałem biednego AVR układem CPLD, wcześniej GAL.

16 minut temu, Sabre napisał:

W EdW promowany był Bascom 2051 i to od początku

Nie przez AVT tylko Zbyszka. Bascom był łatwiejszy od ASM  C na 8051 był dość drogi) ale miał ograniczenia na tyle duże, ze używałem ASM. Czasy się zmieniły to i w C na 8051 pisałem ale wiele tego nie było, niekomercyjny projekt tylko jeden http://er-mik.prv.pl/ctac/

29 minut temu, Sabre napisał:

więc każdy, dosłownie każdy może kupić Arduino i w mniej niż 5 minut ściągnąć gotowiec i go użyć.

Raczej w godzinę albo i kilka. Na forach często poczatkujący mają problem bo jest wiele bibliotek o tych samych nazwach ale różnej funkcjonalnosci. Bałaga niesamowity i jak ktos trafi źle to wyświetlacz będzie uruchamiał kilka dni.  

Niedawno wymieniłem sprzęt i Arduino instalowałem od nowa. Skompilowanie kodu, który sam pisałem,  zakończyło się sukcesem  (niepełnym) po kilku godzinach bo trzeba było "macać", która biblioteka jest dobra. Jeszcze jedną muszę znaleźć i nauczony tym przykrym doświadczeniem, przeniosę biblioteki do katalogu programu aby w przysłosci nie mieć podobnego problemu. Mógłbym to olać, bo na Arduino napisałem kiedyś 2 programy i stwierdziłem, że Arduino to zabawka, ale z konieczności programów będzie więcej, choćby ostatnie dwa dla dopalaczy do WS2812 i LCD gdzie nie tylko trzeba napisać soft ale i bibliotekę.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
9 godzin temu, Elvis napisał:

A asembler oczywiście warto znać, ale w dzisiejszych czasach zapotrzebowanie na jego użycie jest bardzo ograniczone.

Asm ARM nie znam bo nie ma takiej potrzeby. Nawet niespecjalnie interesuje mnie że jest potok, że gdy kończy się jedno przerwanie a zaczyna obsługa kolejnego to nie ma niepotrzebnych operacji na stosie, że ARM sprzętowo odkłada wszystkie rejestry na stos w przerwaniu i sprzętowo je zdejmuje.. AVR znam, bo "mus był". Dlaczego wyjaśniłem w drugim moim poście.

 

9 godzin temu, Elvis napisał:

umiejętność programowania to wcale nie poznawanie rejestrów i instrukcji asemblera - więc wbrew pozorom więcej można się nauczyć używając Arduino niż dłubiąc w asemblerze.

To zależy czy piszemy program pod system ze sterownikami czy owe "sterowniki" trzeba rzeźbić samemu. Już wielu programistów, uważających się za ekspertów, poddało sie na mikrokontrolerach. Taki delikwent myślał, ze jak zna PHP czy pisze na Winde albo Linux w C++, to bez problemu napisze soft na uC. Okazuje się, że nie. Taki programista poradził by sobie, gdyby pisał sterowniki. Niektóry polegli na braku RAM. W PC można sobie pisać jak się chce, na uC już nie. Trochę nieprzemyślanych allocmem, Stting++ i program się wywala.

Aktualizacja:

9 godzin temu, Elvis napisał:

Skoro dłubiesz programiki w asemblerze

na SM się wychowałem, takie były czasy. Znam ASM (w kolejności poznawania) 6502, Z-80, 680x0, 8051. Znam także egzotyczne języki jak "E" (nie mylić z proszkiem do prania).

Największy program w ASM na 8051 to chyba http://er-mik.prv.pl/komputery/avt-5065.htm Był jeszcze HUB422 zdaje się bliżej 16kb niż 12kB. Na 6502 sporo napisałem http://er-mik.prv.pl/komputery/spis_c-64.htm ale który miał najdłuższy kod, nie mam pojęcia. Może to programator eprom? Może coś do grafiki? Może gra (tam czasem grafika dużo zajmuje). Wielkość kodu to jedno a stopień trudności to co innego. Bywało, że robiłem rzeczy pozornie niemożliwe http://er-mik.prv.pl/komputery/c64-DemoSamplera.htm CPU był obciązony niczym AVR wysyłający dane do LED WS2812 na przerwaniach.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
Gość
Ten temat został zamknięty.

×
×
  • Utwórz nowe...