Na przykład PIC10F200T
Praktycznie każdy kod, który napiszesz, będzie większy niż ten, chyba że jest to układ jednofunkcyjny. Czy jest jakiś sposób, aby załadować więcej pamięci programu z pamięci zewnętrznej lub coś takiego? Jestem tylko ciekawy, nie rozumiem, jak to może być bardzo przydatne ... ale musi być.
microcontroller
pic
memory
storage
koder543
źródło
źródło
Odpowiedzi:
Dzieciaki, zejdźcie z mojego trawnika!
384 bajty to dużo miejsca na stworzenie czegoś dość złożonego w asemblerze.
Jeśli przejrzysz historię, kiedy komputery były wielkości pokoju, znajdziesz naprawdę niesamowite osiągnięcia artystyczne wykonane w <1k.
Na przykład przeczytaj klasyczną historię Mel - prawdziwego programisty . Trzeba przyznać, że ci faceci mieli 4096 słów pamięci do zabawy, dekadenccy niewierni.
Zobacz także niektóre ze starych konkursów demonstracyjnych, w których wyzwaniem było dopasowanie „intro” do bootblocka dyskietki, typowymi celami są 4k lub 40k i zwykle udaje im się włączyć muzykę i animację.
Edytuj, aby dodać : Okazuje się, że możesz zaimplementować pierwszy na świecie kalkulator naukowy o wartości 100 USD w 320 słowach.
Edycja dla najmłodszych:
źródło
Mikrokontrolery są na tyle tanie, że często są używane do robienia naprawdę prostych rzeczy, które w przeszłości prawdopodobnie byłyby wykonywane z dyskretną logiką. Naprawdę proste rzeczy. Na przykład, ktoś może chcieć, aby urządzenie włączało wyjście na jedną sekundę co pięć sekund, a dokładniej niż byłby w stanie to zrobić zegar 555.
Byłaby to prawdziwa, użyteczna aplikacja, zawierająca mniej niż 32 słowa (48 bajtów) przestrzeni kodu. Można łatwo dodać kilka opcji, aby mieć pewne opcje sterowania czasem styków we / wy i nadal mieć dużo miejsca do stracenia, ale nawet jeśli wszystko, co zrobił, było dokładnie tak, jak pokazano powyżej, może być tańsze i łatwiejsze niż jakakolwiek alternatywa z wykorzystaniem dyskretnych logika. BTW,
clrwdt
instrukcje można przenieść do podprogramu, ale uczyni to mniej niezawodnym. Jak napisano, nawet jeśli usterka spowoduje uszkodzenie stosu adresów zwrotnych, watchdog nie zostanie zasilony, dopóki wykonanie nie powróci do głównej pętli. Jeśli tak się nie stanie, organ nadzorczy zresetuje układ po kilku sekundach.źródło
clrwdt
instrukcji. Nie jest to najbardziej absolutnie bezpieczny sposób przeciwdziałania awariom, ale należy wziąć pod uwagę kwestie bezpieczeństwa (np. Unikanieclrwdt
podprogramu).„TYLKO” 384 bajty?
Dawno temu miałem za zadanie napisać (samodzielnie) cały system operacyjny dla specjalistycznego komputera obsługującego przemysł zarządzania statkami, rurociągami i rafineriami. Pierwszy taki produkt firmy był oparty na 6800 i był aktualizowany do 6809, i chcieli, aby nowy system operacyjny współpracował z 6809, aby mogli wyeliminować koszty licencji oryginalnego systemu operacyjnego. Zwiększali także rozmiar romu rozruchowego do 64 bajtów, w porównaniu z 32. Jeśli dobrze pamiętam, to BYŁO około 33 lat temu! - Przekonałem inżynierów, aby podali mi 128 bajtów, abym mógł umieścić sterowniki ROM całego systemu operacyjnego na ROMie, dzięki czemu całe urządzenie będzie bardziej niezawodne i wszechstronne. Obejmowało to:
Tak, wszystkie z nich były tak proste, jak to tylko możliwe, i zoptymalizowane ręcznie, aby usunąć każdy obcy cykl, ale doskonale sprawne i niezawodne. Tak, podłączyłem to wszystko do dostępnych bajtów - och, skonfigurowałem również obsługę przerwań, różne stosy i zainicjowałem system operacyjny w czasie rzeczywistym / wielozadaniowość, poprosiłem użytkownika o opcje rozruchu i uruchomiłem system.
Mój przyjaciel, który jest nadal związany z firmą (jej następcą), powiedział mi kilka lat temu, że mój kod wciąż działa!
Możesz zrobić dużo z 384 bajtami ...
źródło
Możesz użyć tego do bardzo małych aplikacji (np. Opóźnionego startu zasilacza , wymiany timera 555 , sterowania opartego na triaku , migania diody LED itp.) O mniejszej powierzchni, niż potrzebujesz z bramkami logicznymi lub timerem 555.
źródło
Zaprojektowałem czujnik wilgotności dla roślin, który śledzi ilość wody w roślinie i miga diodą LED, jeśli roślina potrzebuje wody. Możesz sprawić, by czujnik nauczył się rodzaju rośliny, a tym samym zmienił jej ustawienia podczas pracy. Wykrywa niskie napięcie na akumulatorze. Skończyło mi się flashowanie i RAM, ale byłem w stanie napisać wszystko w kodzie C, aby ten produkt działał bezbłędnie.
Użyłem wspomnianego pic10f.
Oto kod, który stworzyłem dla mojego czujnika wody w zakładzie. Użyłem pic10f220, ponieważ ma moduł ADC, ma taką samą pamięć jak pic10f200, postaram się znaleźć schemat jutro.
Kod jest w języku hiszpańskim, ale jest bardzo prosty i należy go łatwo zrozumieć. Kiedy Pic10F budzi się z trybu uśpienia, zresetuje się, więc musisz sprawdzić, czy to był PowerUp, czy zresetować i odpowiednio postępować. Ustawienie rośliny jest utrzymywane w pamięci ram, ponieważ nigdy tak naprawdę nie wyłącza się.
MAIN.C
MAIN.H
Daj mi znać, jeśli masz pytania, postaram się odpowiedzieć na podstawie tego, co pamiętam. Kodowałem to kilka lat temu, więc nie sprawdzaj moich umiejętności kodowania, poprawiły się :).
Ostatnia uwaga. Użyłem kompilatora Hi-Tech C.
źródło
Jedna rzecz, o której nie widziałem: mikrokontroler, o którym wspomniałeś, kosztuje tylko 0,34 USD w ilości 100 sztuk. Tak więc w przypadku tanich, produkowanych masowo produktów sensowne jest przejście na dodatkowe problemy z kodowaniem narzucone przez tak ograniczoną jednostkę. To samo może dotyczyć wielkości lub zużycia energii.
źródło
Kiedy byłem w szkole średniej, miałem nauczyciela, który nalegał, aby ściemnianie światła było zbyt trudnym zadaniem dla takiego ucznia jak ja.
Tak rzucone wyzwanie poświęciłem sporo czasu na naukę i rozumienie ściemniania fazowego za pomocą triaków i programowanie 16C84 z mikroczipu, aby wykonać ten wyczyn. Skończyło się z tym kodem asemblera:
Oczywiście musisz zmodyfikować to dla wspomnianego układu i dodać tani program szeregowy do wprowadzania danych, ponieważ twój układ nie ma 8-bitowego portu do słuchania, ale chodzi o to, że pozornie złożone zadanie może zrobić w bardzo małym kodzie - w 10F200 można zmieścić dziesięć kopii powyższego programu.
Więcej informacji o projekcie można znaleźć na mojej stronie Light Dimming . Nawiasem mówiąc, nigdy nie pokazałem tego mojemu nauczycielowi, ale skończyło się na zrobieniu wielu przyponów oświetleniowych dla mojego przyjaciela DJ-a.
źródło
Cóż, lata temu napisałem kontroler temperatury z szeregowym we / wy (bit-bangowanie szeregowego we / wy, ponieważ MCU nie miało UART) i prosty interpreter poleceń do rozmowy ze sterownikiem. MCU to Motorola (obecnie Freescale) MC68HC705K1, który miał aż 504 bajty pamięci programu (OTPROM) i około 32 bajtów pamięci RAM. Nie tak mały jak PIC, o którym wspominasz, ale pamiętam, że zostało trochę pamięci ROM. Wciąż mam jeszcze kilka zmontowanych jednostek, 17 lat później; chcesz kupić?
Tak, można to zrobić, przynajmniej podczas montażu.
W każdym razie, ostatnio napisałem bardzo proste programy w C, które po zoptymalizowaniu prawdopodobnie zmieściłyby się w 384 bajtach. Nie wszystko wymaga dużego, złożonego oprogramowania.
źródło
Możesz napisać mrugnięcie diodą LED z pamięcią programu o długości 384 bajtów, a nawet więcej.
O ile mi wiadomo, nie jest możliwe rozszerzenie pamięci programu za pomocą zewnętrznego układu scalonego (chyba że budujesz pełny interpreter ASM w 384 bajtach , co byłoby wolne). Możliwe jest jednak rozszerzenie pamięci danych za pomocą zewnętrznego układu (EEPROM, SRAM).
źródło
To jest naprawdę gorsze niż myślisz. Połączona strona Mouser jest myląca, gdy określa ten procesor jako mający 384 bajty pamięci programu. PIC10F200 ma w rzeczywistości 256 12-bitowych słów pamięci programu.
Co możesz z tym zrobić? 12-bitowy zestaw instrukcji PIC wykorzystywane przez PIC10F20 x urządzeń są wszystkie instrukcje pojedynczych słów, więc po odjąć kilka instrukcji konfiguracji procesora, jesteś w lewo z wystarczająco dużo miejsca dla programu około 250 kroków. To wystarcza do wielu aplikacji. Na przykład prawdopodobnie mógłbym napisać kontroler pralki w takiej przestrzeni.
Właśnie przejrzałem dostępne kompilatory PIC C i wygląda na to, że około połowa z nich nawet nie spróbuje wyemitować kodu dla PIC10F200. Te, które prawdopodobnie wypuszczają tak dużo kodu, że możesz tylko napisać diodę LED w pozostałej przestrzeni. Naprawdę chcesz używać języka asemblera z takim procesorem.
źródło
machając laską za dnia, musieliśmy wytrawić własne kawałki z piasku!
W 1976 roku (lub później) system Atari 2600 VCS był jedną z najpopularniejszych „platform gier wideo” tamtych czasów. Mikroprocesor (MOSTEK 6507) działał w nim z oszałamiającym ~ 1 MHz i miał **** 128 bajtów RAM **.
Drugim przykładem, który pamiętam z mikrokontrolera z bardzo ograniczoną pamięcią RAM (~ 128 bajtów) był PIC12F zastosowany na przetwornicy DC-DC. Mikro musiało także używać języka asemblera, aby w ogóle działać.
źródło