Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 kwi 2024, o 01:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 24 sty 2012, o 14:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Kwestia zasobów mikrokontrolera jest szczególnie ważna podczas pisania programu i dobór właściwego
jest bardzo ważny. Znamy wiele krzyków z elektrody gdzie wielu pisze " ATMega8 do czegoś takiego tu wystarczy TINY" Zapewne jest w tym wiele racji , ale należy też pamiętać o tym że większość zasobów
wyrażana jest w kilobitach nie kilobajtach. Początkujący maja wiele problemów z rozróżnieniem wartości
i panowaniem nad wieloma czynnikami wpływającymi na program, takimi jak stos, rejestry itd często też
udaje się im skompilować program który ... jakimś cudem nie mieści się w pamięci procesora dlaczego tak się dzieje??

Tu oprzemy się na naszej małej Medze8

Jest ona mała i popularna oraz w większości przypadków aż za dobra do projektów wiec słów kilka:

Pamięć Flash 8 Kbajtów (8192-słowa 8bitowe )
Pamięć EEPROM 512 bajtów (512 - słów 8bitowych)
Pamięć SRAM 1Kbit (1024 bity /8 co nam daje 128 słów 8 bitowych (bajtów))

Jak widać zależności SRAM mamy bardzo mało a musi się w nim wiele zmieścić.

Skoro jednak mega 8 ma 8Kb Flasha to czym się przejmować i dlaczego w poście o delayu podałem wartości po kompilacji w bitach. To proste kompilator arduino którego używam wersja 022 dostosowana do Sunduino wyświetla po kompilacji objetość pliku wynikowego w bitach właśnie.

I teraz liczymy to następujaco:

1bit = 1bit
8bitów = (słowo 8bitowe)
1024bity = 1 kilobit

jak z tego wynika wystarczy ilość kilobitów podzielić przez 8 co nam daje liczbę 8bitowych słów czyli bajtów programu.

W samej pamięci flash nie jest to aż tak istotne , ale w przypadku pamięci SRAM czy popularnych EEpromów zewnętrznych oraz pamięci DATAFLASH to już kwestia 1 wagi.

Pojemność pamięci zewnętrznych EEprom jest zawsze wyrażana w KILO BITACH i tu najwięcej
popełnia się błędów dlatego że :

Kupiliśmy sobie wielkiego eeproma, a co wystarczy na duuuużooo np:
kostka serial EEProm 24AA1026 posiadająca zasoby na poziomie 1MB dużo prawda nic bardziej mylnego.
Pamięć ta jest wyrażona w MegaBITACH czyli jest to aż 1024kilobity. Czyli ile tak właściwie??

można to obliczyć następująco:

Jak wiemy z noty nasza pamięć posiada 1MegaBit pojemności na 8 stronach adresowych
czyli 128 x 8 = 1024bajty czyli 1Kbajt pojemności.

Warto o tym pamiętać. Podobnie jest z pamięciami DATA FLASH i Serial SRAM ... oraz SRAM zawartymi
w procesorach.

W zasadzie w mikrokontrolerach wprowadzono z bajtami pewnego rodzaju uproszczenie.
ponieważ ich pamięć flash jest przeliczana na słowa 8 bitowe (z racji ilości bitów w rejestrach)
W związku jednak z naleciałością komputeryzacyjną stosuje się do wyrażania tej pamięci jednostkę
bajt (słowo 8 bitowe) a w stosunku do innych pamięci stosuje się bit lub wielokrotność kilobit

tak wiec zapis:
1Kb = 1 kilobajt
a
1KB = 1 kilobit

różnica jest taka że

1Kb = 1024 bajty = 819 2bity
natomiast
1KB = 1024 bity = 128 bajtów

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 14:13 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

SunRiver napisał(a):
Pamięć SRAM 1Kbit (1024 bity /8 co nam daje 128 słów 8 bitowych (bajtów))


No ale tu chyba wkradła się mała pomyłka ? hmmm ?

Babcia ATmega8 ma jednak 1024 bajty pamięci RAM dostępnej dla śmiertelnika, który chce jej używać. Czyli jednak 1 Kilo Bajt a nie 1 Kilo Bit. Tak mi się wydaje przynajmniej - na ile znam ten procek.


natomiast to:
SunRiver napisał(a):
Pamięć Flash 8 Kbajtów (8192-słowa 8bitowe )


Bym uzupełnił może tak:
Pamięć Flash 8 Kbajtów (8192-bajty )
Jednak pamięć zorganizowana jest w postaci słów, gdzie słowo oznacza dwa bajty. Pisząc jeden, nawet najprostszy rozkaz asemblera np NOP zajmujemy w tejże pamięci nie 1 bajt ale aż 2 bajty !!! (CAŁE SŁOWO)

W efekcie pamięci flash dla programu posiadamy w ATmega8 tak na prawdę nie 8KBajtów a 4KSłowa (tak się to powinno określać) .... czyli możemy zapisać tylko 4096 rozkazów !!! i ani jednego więcej.

W przypadku np procków PIC 8-bitowych pamięć FLASH podaje się i słusznie w KBajtach ale tu to już jest jak dla mnie przynajmniej wolna amerykanka (dlatego może są bardziej popularne w Ameryce ;) ) mają one np organizację pamięci w słowa 14-bitowe ..... brrrr Przez to np nie da się optymalnie wykorzystać pamięci Flash do załadowana jakichś danych 8-bitowych. A w przypadku AVRów - spokojnie w jednym słowie 16-biotowym upakujemy pięknie dwa bajty danych.... Może się gdzieś mylę w przypadku PIC'ów - ale na pewno zaraz mnie kolega SunRiver sprowadzi na ziemię i sprostuje. (ja z góry przepraszam, jeśli coś w sprawie PIC'ków namieszałem)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 14:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 paź 2011
Posty: 580
Lokalizacja: Warszawa
Pomógł: 0

zgadzam się 1 kilobajt :P jest drobna pomyłeczka :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 15:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

No przepraszam wszystkich za mała pomyłeczkę w istocie babcia M8 ma 1Kb pamięci SRAM
czyli 1024 bajty czyli 8kilobitów (8192bity) w istocie strzeliłem byka.

Co zaś do pamięci PIC to posłużę się jako przykładem układem PIC18F2550 można by rzec taka PICKOWA mega8 oczywiście w dużym uproszczeniu
Procesor ten posiada Fizycznie 32Kbajty pamięci Flash co pozwala na zmieszczenie w niej 16384 instrukcji 8 bitowych.
posiada 2Kbajty (2048bajtów) pamięci SRAM i 256bajtów EEprom. No dobra taka pickowa mega328 :) i tu jest wszystko tak samo jak w AVR, ale
jak słusznie zauważył kolega Mirek niektóre pice posiadają bardzo dziwne ilości pamięci pogrupowane w słowa 14 bitowe d-word ale jest to spowodowane tylko i wyłącznie oszczędnością pamięci i instrukcji gdzie po prostu zrealizowano dla uproszczenia UWAGA !!

bajt 7 bitowy :) spowodowane jest to tym, że nic nie tracimy na funkcjonalności , po prostu obcinany jest nieznaczący bit z instrukcji.
to działa tak jak kasowanie w wyniku pomiaru zera nieznaczącego.

gdzie przykładem może być np PIC16F690 :) gdzie pamięć jest zorganizowana w 4096 × 14-bitowych słów :)
to tak w bardzo dużym skrócie, bo geneza tego rozwiaząnia jest trochę długa i przynudnawa , ale wierzcie mi na słowo ma głębszy sens

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 15:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 paź 2011
Posty: 580
Lokalizacja: Warszawa
Pomógł: 0

nio pice są dosyć ciekawymi i fajnymi "kuzynami" AVR :P

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 15:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Uprzedzając pytania dotyczące tych magicznych 14 bitów w PIC
dodam jeszcze tylko tyle że budowa procesorów PIC podobnie jak ATMega opiera się na architekturze harvardzkiej,
tzn. mają oddzieloną pamięć danych od pamięci programu ale Pice dodatkowo mają dwie oddzielne magistrale o różnej
szerokości słowa. Dla pamięci programu są stosowane słowa 14-bitowe, natomiast pamięć danych jest 8-bitowa.
Dlatego procesory PIC są zaliczane do grupy procesorów 8-bitowych.
Dzięki tak długim słowom pamięci programu w pojedynczej instrukcji może być zawarty
zarówno kod, jak i argument (argumenty) operacji, wskutek czego liczba słów
możliwych do zapamiętania w pamięci odpowiada liczbie możliwych do wykonania
instrukcji. W przypadku architektury tradycyjnej jedna komórka zawiera zwykle kod
operacji, a kolejne – argumenty. Dlatego kod wynikowy takich samych programów
jest zazwyczaj dla procesorów PIC nieco krótszy.
W procesorach zastosowano potokowy system pracy ( pipeline), w którym procesor
podczas wykonywania rozkazu pobiera z pamięci następny, co sprawia wrażenie, że
wykonanie rozkazu trwa tylko jeden cykl maszynowy.
Wszystkie rejestry specjalne procesora – SFR ( Special Function Register) – odwzorowane
są w pamięci RAM i są dostępne tak samo jak inne komórki pamięci,
tzn. poprzez adresowanie bezpośrednie lub pośrednie. Pomysł ten nazwano koncepcją
tablicy rejestrów ( Register File Concept).
Inną interesującą cechą procesorów PIC jest to, że w każdym słowie pamięci programu
może być umieszczony zarówno argument, jak i wynik operacji, tradycyjnie
przesyłany do akumulatora. Jego rolę pełni w tych procesorach rejestr roboczy oznaczony
jako W ( Working Register). Brak wyjątków, obecnych zazwyczaj w takich
przypadkach, bardzo upraszcza programowanie procesora. Cechę tę producent nazywa
symetrią lub ortogonalnością instrukcji. Teraz mam nadzieje ze stało się już wszystko jasne.

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 15:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

O!!! czytając w końcu na temat ala odpowiednika ATmega328 wśród PIC'owej braci - szybko skoczyłem do sklepu tuż za internetowym rogiem, żeby zasięgnąć języka co ten procesorek ma w sobie jeszcze - aby się choć troszkę przekonać do PIC'ków. Pomyślałem, że czymś mnie miło może zaskoczy....

Zatem poza rodzajami pamięci, które pięknie kolega SunRiver porównał (dzięki - bo ja nie jestem w stanie się połapać w tych PIC'kach) .... jak się sprawa ma z innymi peryferiami.

1. Pamięci EEPROM maławo bo tylko 256 bajtów - no ale co tam - aż tak często się z niej nie korzysta
2. 1xUART + SPI/I2C - ATmega328 tyż posiada
3. 1xTimer 8-bit + 3xTimer16bit ;) ... wow tu już banan się pokazał - dużo lepiej niż w ATmega328
4. 10 kanałowy ADC hmm też trochę lepiej
5. 1xUSB .... no no nooo ... ładnie, nawet bardzo ładnie

(SunRiver - przestań!, bo przez ciebie jeszcze mnie coś podkusi i wezmę w ręce te kocie PIC'e) ;)

A tak na poważnie - to może podpowie kolega SunRiver jak to jest (tak ogólnie mi chodzi a nie o szczegóły) z praktycznym wykorzystaniem tego USB w procku zarówno od strony procka-programu jak i szczególnie od strony PC ????

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 15:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

w zasadzie to wygląda tak w uproszczeniu że dostajemy sprzętowy USB który pracuje na sterownikach HID chyba najprostszym przykładem
może być zbudowany na 18F2550 programator, debuger, USB-RS , analizator stanów logicznych czyli PICKIT2 :)

Albo na trochę większym bracie odpowiedniku ATmegi32 PIC18F4550 płytka PICDEM gdzie przez USB mamy bezpośredni dostęp
do sprzętu na płytce i jego monitorowanie włącznie z bootloaderem na USB bez przejściówek typu FTDI i komplikowania sobie życia
w sposób znany z AVR np poprzez oprogramowanie CDC , po prostu dostajesz od Microchipa kompletna klasę USB wraz ze sterownikiem HID
oraz wymaganym VID i PID nie mówiąc o tym że możesz wystapic o nadanie własnych nieodpłatnie.

Obrazek

a na kompie po podłączeniu działa to tak:
Obrazek

No i najważniejsze co nie zauważyłeś jest to USB 2.0

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Ostatnio edytowano 24 sty 2012, o 16:03 przez SunRiver, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 15:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 paź 2011
Posty: 580
Lokalizacja: Warszawa
Pomógł: 0

ciekawe są też PIC10F wielkości tranzystorka SMD :P

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 16:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

A się wyrwał z 10 siatkami :) łobuz jeden:)

ale fakt PIC10F322 jest dosyć ciekawy mimo niewielkich wymiarów i 6 nóżek :)
posiada spore zasoby:)

0,896 KB flash
osiąga 4 mipsy
64bajty ram
2 8 bitowe timery
3kanałowy 9 bitowy ADC
działa w zakresie napiec 1.8 - 5.5V
i ma 40 lat gwarancji na pamiec Data flash :)
i wiele innych:)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2012, o 16:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 paź 2011
Posty: 580
Lokalizacja: Warszawa
Pomógł: 0

moj mały faworyt jeśli chodzi o minimalizacje :] czekam na Pickita tylko, bo zaopatrzenie w pice juz mam :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2014, o 13:05 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 59
Lokalizacja: Lubliniec
Pomógł: 3

SunRiver napisał(a):

Jak wiemy z noty nasza pamięć posiada 1MegaBit pojemności na 8 stronach adresowych
czyli 128 x 8 = 1024bajty czyli 1Kbajt pojemności.


Sun nie łapie tego jakoś:

skoro mamy pamięć 1 Mega Bit czyli jest to 1024 kilo Bitów, a to jest znowu 1024 * 1024 Bitów czyli 1048576 Bitów, tak się to liczy?
Bo wtedy nie rozumiem do końca tego już zapisu czyli 128 x 8 = 1024bajty czyli 1Kbajt pojemności, chyba sam już za dużo zacząłem kombinować ;p



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2014, o 13:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

PICe są o tyle fajne i zarazem trudne, że posiadają tylko kilka instrukcji w assemblerze. Większość rzeczy uzyskuje się poprzez intsrukcje wejścia/wyjścia. Ta minimalizacja bardzo ułatwia zapamiętanie mnemoników ale powoduje, że kod staje się mniej czytelny niż w MEGACH i trudniejszy do napisania. Natomiast kod napisany pod PICa w C jest dość łatwo przerabialny na MEGOWEGO C. Znaczy inaczej. Da się to łatwo zrobić. Jako przykład proszę poczytać kod w C dla PICa z tej strony. http://www.electronics-lab.com/projects/mcu/015/ lub http://www.circuitvalley.com/2011/12/tw ... phics.html Prawda, że wygląda podobnie jak MEGA C?

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO