ATTINY 25/45 i Fuse bity. Pomocy!!

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

ATTINY 25/45 i Fuse bity. Pomocy!!

Post autor: kayron » 10 lut 2009, 18:47

Witam wszystkich. Mój problem to procesor ATTINY 45, a konkretnie jego fuse bity. Otóż chciałbym tak skonfigurować ten procesor aby działał z wewnętrznym oscylatorem RC, a w dodatku w trybie kompatybilności z ATTINY 15. Z tego co zrozumiałem z noty katalogowej to trzeba go ustawić na 1.6MHz (dla prekselra), ale na ekranie fusów widzę więcej opcji dotyczących zegara. Miałbym więc prośbę dla tych którzy już programowali ATTINY25/45, czy mogli by wytłumaczyć jak to zrobić, oraz opisać poszczególne bity, bo nota katalogowa, akurat w tej dziedzinie to głównie kartkowanie, bo składa się raczej z odnośników do stron. A i mój angielski to raczej perfekt też nie jest. Załączam skren z moich fusów.
Z góry dziękuję za pomoc.
Załączniki
fusy attiny 45000.jpg

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 31 paź 2009, 14:49

ja trochę odświeżę temat. niedługo będę chciał zaprogramować tiny45 z wewnętrznym taktowaniem. możecie trochę się rozpisać o tym? trzeba ustawiać coś w bascom AVR?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 31 paź 2009, 18:25

ATTINY jest fabrycznie skonfigurowany jako taktowany zegarem wewnętrznym (chyba 1MHz), więc nie trzeba nic przestawiać jak ci to odpowiada. Natomiast samemu przestawiając FUSy należy uważać :!: :
A. Aby nie odciąć sobie końcówki RESET. Katastroficzne w skutkach bo bez specjalnego programatora nie odblokujesz proca.
B. Nie odłączyć możliwości programowania procesora przez SPI. Skutki jak przy RESECIE.
C. Zmieniając zegar wewnętrzny, nie przełączyć się przypadkiem na zewnętrzny, lub wpisać konfiguracji zabronionej. Dodatkowo zmiana wewnętrznego zegara CPU na inny niż 1MHz może spowodować, że BASCOM nie będzie potem umiał wykryć i prawidłowo się komunikować z CPU, co utrudnia reprogramowanie. Ale z tym akurat metodą prób i błędów zmieniając parametr PORT DELAY w opcjach BASCOM da się uporać.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 31 paź 2009, 19:12

kayron pisze:Nie odłączyć możliwości programowania procesora przez SPI
a jak to można zrobić? chcę wiedzieć żeby się ustrzec. czy uzywając resetu jako zwykłego pinu IN/OUT nie zrobię tego?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 31 paź 2009, 19:39

Jak użyjesz pinu RESET jako zwykłego pinu I/O to stracisz możliwość programowania za pomocą najprostrzych programatorów jak STK200. Wtedy potrzebny jest specjalny programator wysoko napięciowy.
Za SPI odpowiada fus SPIEN, ale niektóre programy chronią przed jego przestawieniem, widać to na skrenie który jest w 1 moim poście gdzie ten fus po postu nie jest możliwy do przestawienia. Ale w BASCOM takiej ochrony nie ma.
Ogólnie jeżeli masz zamiar robić częściej na AVRach to lepiej zainwestować w programator z trybem HVS , który pozwala odblokowywać zblokowane CPU. Ogólnie sprawdza się tu powiedzenie "Co ile kosztuje, tyle też może"
Ostatnio zmieniony 31 paź 2009, 19:50 przez kayron, łącznie zmieniany 2 razy.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 31 paź 2009, 19:43

kayron pisze:Jak użyjesz pinu RESET jako zwykłego pinu I/O to stracisz możliwość programowania za pomocą najprostrzych programatorów jak STK200.
ale powiedzmy że będę ten procek programował w oddzielnym układzie, nie w układzie docelowym. a wejście reset ma mi służyć jako wejście badania długości impulsu

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 31 paź 2009, 19:50

Nie zmienia to faktu że jak użyjesz pinu RESET jako portu I/O to tracisz możliwość programowania najprostszymi programatorami. wtedy tylko programator z trybem HVS (High Volotage Serial programming interface) może posłużyć do ponownego zaprogramowania takiego procesora.
PS. przepraszam pomyliłem się w poście wyżej i napisałem HVP zamiast HVS. Ale poprawiłem już to.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 31 paź 2009, 20:02

to jak zrobić żeby móc używać resetu jako normalnej końcówki i do tego nie stracić możliwości ponownego programowania procka?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 31 paź 2009, 20:12

Nie da się. Albo jedno, albo drugie. Jedyne wyjście jak musisz taki mały procesor zastosować, to zakup programatora HVS. Wtedy nawet jak zblokujesz linię RESET dasz rade przeprogramować procesor. Ostatecznie są jeszcze AVRy w obudowach DIL16, które mają więcej pinów, i unikniesz problemu z końcówką RST, bo wykorzystasz inny pin procesora.
Wiem to jest straszne ale Atmel właśnie tak załadował w bambuko użytkowników, chcąc zrobić trochę zbyt uniwersalny procesor. Dla tego ja też mam zamiar przerzucić się na jakiś lepszy programator z trybem HVS. Po prostu inaczej się nie opłaca.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 31 paź 2009, 20:19

chdzi o to żebybyło to jaknajmniejsze, a tiny45 pasuje mi tu jak diabli

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 31 paź 2009, 20:21

No to niestety bez programatora z trybem HVS się nie obędziesz, no chyba że jesteś tak dobry że za pierwszym razem napiszesz w 100% dobrze działający program.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 31 paź 2009, 20:22

moge program najpierw przetestować na tiny2313 i dopiero wzrzucuć na tiny45, tak?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 31 paź 2009, 20:47

Nie zupełnie, bo procesory te nie są z sobą do końca kompatybilne, różnią sie trochę Timerami i innymi układami. Ogólnie jak chcesz programować to w BASCOM to przygotuj się na ciężkie i bolesne starcie, oraz wydrukuj sobie notę katalogową do ATTINY45, bo bez niej nic nie zrobisz, zresztą z ATTINY2313 też niewiele. Bascom po prostu nie wspiera tych procesorów (praktycznie cała rodzina TINY). Możesz zapomnieć o poleceniach Config Timer, nie będą prawidłowo działać. Wszystko trzeba robić ręcznie. Więc czeka cie takie coś:

Kod: Zaznacz cały

Ocr0a = 254                'konfiguraja T0 i jego start w trybie automatycznej kontroli
Tccr0a = Tcr0a             'trzeba robić z poziomu rejestrów CPU. BASCOM nie obsługuje
Tccr0b = T0_start          'tego procesora prawidłowo z funkcji bibliotecznych
Poz_wys = 1                'inicjacja pozycji do wyświetlania na ekranie
Vram(1) = Lookup(13 , Cgrom)       'napis powitalny
Ostatnio zmieniony 31 paź 2009, 20:51 przez kayron, łącznie zmieniany 1 raz.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 31 paź 2009, 20:49

kayron pisze:Bascom po prostu nie wspiera tych procesorów. Możesz zapomnieć o poleceniach Config Timer, nie będą prawidłowo działać.
to jak Alberts napisał ten kompilator że nie wspópracuje z prockami?
a nawiasem mówiąc nie będę używał timerów. żadnego. tylko zmienne i zapis do wewnętrznej pamięci RAM. no i polecenie pulsein.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 31 paź 2009, 20:53

Ciężko stwierdzić co się w Bascom stanie. Natomiast winę bardziej ponosi ATmel który zrobił rodzinę procesorów, które między sobą nie są kompatybilne sprzętowo, więc nie mam żalu do twórców Bascoma że dali sobie z tą rodzinę spokój, i nie stworzyli odpowiednich bibliotek (choć były pierwotnie zapowiadane).
Przeznaczenie:
Zwraca ilość jednostek czasowych, które upłynęły pomiędzy dwoma zboczami impulsów.
Składnia:
PULSEIN zmienna , PINx , nr_końcówki , zbocze
gdzie:
zmienna zmienna do której wpisany będzie czas, wyrażony w jednostkach czasowych,
PINx nazwa rejestru wejściowego portu, np. PIND,
nr_końcówki numer testowanej końcówki w podanym porcie PINx
zbocze określa przejście stanu na końcówce jakie ma być brane pod uwagę. Podanie 0 określa, że chodzi o przejście z 0 do 1; podanie zaś 1, że o przejście z 1 na 0.
Opis:

Instrukcja PULSEIN oczekuje na pojawienie się określonego zbocza na podanej końcówce. Gdy jako ostatni parametr podane jest 0, instrukcja oczekuje, aż stan końcówki też będzie 0. Wtedy dopiero zostanie uruchomiona procedura zliczania czasu, zakończona dopiero gdy na końcówce pojawi się stan 1, lub też gdy upłynie maksymalny czas oczekiwania na zmianę stanu.
Gdy czas przekroczy z góry określony limit, zmienna ERR przyjmie stan 1. Limit ten jest ustawiony na 65535 jednostek, co przy jednej jednostce wynoszącej 10ms da czas 655.35ms.

Można dodać instrukcję BITWAIT, by mieć pewność, że instrukcja PULSEIN odczeka na pojawienie się określonego stanu początkowego. Z drugiej jednak strony, jeśli stan ten się nie pojawi program zatrzyma się w tym miejscu na stałe.

Uwaga! Do zliczania nie jest używany żaden z liczników-czasomierzy. Wewnętrzna zmienna pracująca jako licznik (16 bitowy) jest zwiększana co 10ms. Czas ten jednak zależy od częstotliwości taktującego kwarcu. Można zmodyfikować procedurę z biblioteki by zmienić podstawową jednostkę czasu.


Zobacz także: PULSEOUT
Asembler:
Wywoływana jest procedura _PULSE_IN (korzystająca z procedury _ADJUST_PIN) z biblioteki MCS.LIB. Jako parametry przekazywane są: ZL wskazuje rejestr PINx, R16 zawiera stan końcówki a R24 przechowuje numer końcówki portu. Procedura zwraca w parze rejestrów X odmierzony czas.

Przykład:
Dim w As Byte

Pulsein w , PIND , 1 , 0 'detekcja zmiany stanu z 0 na 1
Print w

End
Teoretycznie powinno działać, ale gwarancji nie ma. No i dokładność może być kiepska (tłusty druczek).

ODPOWIEDZ