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
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 01 lis 2009, 9:08

kayron pisze:Teoretycznie powinno działać, ale gwarancji nie ma. No i dokładność może być kiepska (tłusty druczek).
napisałem program bez bascoma, wykorzystując gotową tylko deklarację zmiennych zapisywanych w pamięci ram procka, czyli na przykład:

Kod: Zaznacz cały

Dim dlugimpdol As Eram Word At &H02
całą resztę programu napisałem z głowy i to w dodatku w pracy i działa. wczoraj dzięki uprzejmości kolegi Pikczu program został sprawdzony w praktyce.
a polecenia pulsein używam do odliczania czasu trwania impulsów pochodzących z aparatury zdalnego sterowania i są to impulsy o długości z przedziału 1 do 2ms.

wczoraj na elektroda.pl poczytałem trochę o fuse bitach. jest tam też plik do ściągnięcia po polsku o fusach. artykuł ten do końca rozwiał moje wątpliwości co do zastosowania końcówki reset jako zwykłego WE/WY. kategorycznie nie powinienem tego robić ani nikt inny. procek na pewno zostanie zablokowany.

-> TUTAJ <- jest link do artykułu. w dalszej części jest plik po polsku z ustawieniami fuse bitów i kilka linków do poszczególnych procków.

a ja mam jeszcze pytanie:

jak zablokować wgrany do procka soft, żeby nikt tego nie odczytał?

dziękuję za odpowiedzi.

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

Post autor: kayron » 01 lis 2009, 17:49

wczoraj na elektroda.pl poczytałem trochę o fuse bitach. jest tam też plik do ściągnięcia po polsku o fusach. artykuł ten do końca rozwiał moje wątpliwości co do zastosowania końcówki reset jako zwykłego WE/WY. kategorycznie nie powinienem tego robić ani nikt inny. procek na pewno zostanie zablokowany.
Czyli właściwie po długich meandrach drogi poznawczej doszedłeś do tego samego co ja ci napisałem. :smile: Ale to dobrze. Zablokować program przed odczytem przez innych można LOCkBitami, są 2. Natomiast zawsze rodzi się pytanie czy warto, bo w razie draki sam też stracisz możliwość odzyskania wsadu, co czasami jest przydatne.

Kod: Zaznacz cały

Dim dlugimpdol As Eram Word At &H02
Jeżeli do tak zdeklarowanej zmiennej będziesz zapisywał często dane, to procesor (a właściwie program w nim) nie pociągnie długo. Chyba że taki jest cel. :wink: W sumie na serwisie też się ładnie zarabia. :mrgreen: to by nawet tłumaczyło czemu chcesz zabezpieczyć program przed odczytem.

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

Post autor: matrix » 01 lis 2009, 18:10

kayron pisze:Jeżeli do tak zdeklarowanej zmiennej będziesz zapisywał często dane, to procesor (a właściwie program w nim) nie pociągnie długo
procek zapamięta dane raz na wiele czasu użytkowania. nie chcę powiedzieć że na zawsze, ale na bardzo długo.
kayron pisze:W sumie na serwisie też się ładnie zarabia. to by nawet tłumaczyło czemu chcesz zabezpieczyć program przed odczytem.
nie nie, to nie tak jak myślisz. jestem uczciwym człowiekiem i nie chcę w ten sposób zarabiać, a pytałem z ciekawości. moją obroną przed odczytem programu z proca jest to, że użytkownicy układu docelowego nie znają się zupełnie na programowaniu, ani na bascomie, ani nawet na procesorach.

powtarzam, pytałem z ciekawości. pamiętam że lock bity były w bascom8051 i nie wiem czy tu w AVR też są?

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 01 lis 2009, 18:13

matrix pisze:powtarzam, pytałem z ciekawości. pamiętam że lock bity były w bascom8051 i nie wiem czy tu w AVR też są?
W zasadzie to jakbyś otworzył PDF to byś otrzymał odpowiedź na swoje pytanie.

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

Post autor: matrix » 01 lis 2009, 18:36

kayron pisze:Czyli właściwie po długich meandrach drogi poznawczej doszedłeś do tego samego co ja ci napisałem. Ale to dobrze.
nie żebym Ci nie wierzył, bo podstaw do tego nie mam, ale lubię czytać.
kayron pisze:Jeżeli do tak zdeklarowanej zmiennej będziesz zapisywał często dane, to procesor (a właściwie program w nim) nie pociągnie długo.
a możesz pokazać mi jak wielokrotnie wpisywać dane do pamięci EPROM żeby procek służył długi czas ?

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

Post autor: kayron » 01 lis 2009, 19:04

Cóż właściwie nie ma na to sposobu. Każda pamięć EEPROM ma swoją żywotność określaną w cyklach zapisu, która najczęściej wynosi 100 000 cykli. Odczytu to nie dotyczy. Można ją lekko po oszczędzać tak modyfikując procedurę zapisu aby sprawdzała przed zapisem czy aby przypadkiem taka sama wartość już tam nie jest. No bo po co 2 razy zapisywać to samo. Ale jest lepsze wyjście, jak masz 2 wolne piny proca, to na I2C podłączyć do proca pamięć FRAM, która zachowuje się jak EEPROM, czyli nie zapomina po zaniku zasilania, a nie ma ograniczenia cykli zapisu.

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

Post autor: matrix » 01 lis 2009, 19:15

kayron pisze:jest lepsze wyjście, jak masz 2 wolne piny proca, to na I2C podłączyć do proca pamięć FRAM, która zachowuje się jak EEPROM, czyli nie zapomina po zaniku zasilania, a nie ma ograniczenia cykli zapisu.
gdyby nie było ograniczenia co do wielkości układu, to z pewnością bym tak zrobił, ale chodzi o to że układ musi być malutki, bo ma mieścić się w modelu samochodu w skali 1:10. sądzę więc że nie będzie żle z tym epromem. no ale dość o tym bo odbiegamy mocno od tematu jakim są fusy.

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 01 lis 2009, 20:19

Ja bym tego nie blokował niema sensu. lepiej papierem ściernym usuń nazwę procka i powinno wystarczyć.

Darek111
-
Posty: 3
Rejestracja: 11 sty 2010, 12:07
Lokalizacja: Namysłów

Post autor: Darek111 » 11 sty 2010, 12:41

kayron pisze:... 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
Bardzo proszę dla przykładu napisać czym zastąpić n/w komendy Bascoma aby licznik zaczoł działać na ATtiny 85:

Kod: Zaznacz cały

Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
Timer0 = 178   lub Load Timer0 78
On Timer0 Timer_int 
Start Timer0
Stop Timer0

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

Post autor: matrix » 11 sty 2010, 12:49

a ja mam pytanie:
czemu na końcu kodu timer zostaje zatrzymany?
napisałeś cytuję:

Kod: Zaznacz cały

On Timer0 Timer_int 
Start Timer0 
Stop Timer0 
nie stopuj go na końcu.

Darek111
-
Posty: 3
Rejestracja: 11 sty 2010, 12:07
Lokalizacja: Namysłów

Post autor: Darek111 » 11 sty 2010, 14:05

Nie zatrzymuję timera na końcu. W poście nie umieściłem część kodu tylko luźne komendy.
a Stop Timer ponoć zalecany przed załadowaniem nowej wartości do licznika np:

Stop timer0
Load timer0 , 78
Start timer0

Przesiedziałem cały weekend nad odpaleniem timerów, ani T0 ani T1 nie chodził a na ATtiny 13 miałem ok tylko mi brakło ramu. Próbowałem na podstawie noty katalogowej procka podstawiać do rejestrów timerów wartości. Niestety nie uruchomiłem T0.
Teraz jestem w pracy a nie wziołem ze sobą programu aby go wkleić.

[ Dodano: 2010-01-11, 18:21 ]
Zainspirowany pytaniem "Po co zatrzymuje na końcu Timer?" zacząłem sprawdzać wyłączać polecenia.
Usunąłem:

Stop Timer0

I o dziwo działa :smile: , ale dlaczego

a sekwencja:

Stop timer0
Load timer0 , 78
Start timer0

nie działa

Wydanie polecenia stop zatrzymuje licznik na amen.
Czy to wina kompilatora? procesora?
Czy ustawienie bitu TSM na jeden powinno zatrzymać Timer a na zero wystartować?
TSM to bit 7 rejestru GTCCR, używam podstawienia w Bascom'ie

GTCCR.7=0
i
GTCCR.7=1
Czy to własciwie?

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

Post autor: kayron » 11 sty 2010, 18:24

Bo w ATtiny45, można włączyć tryb kompatybilności z Tiny15, ale tryb ten uruchamia sie ustawiając odpowiednio Fusy podczas programowania proca. Darek to że BASCOM ci skompiluje twój program nie świadczy o tym że po jego załadowaniu do proca zadziała tak jak się spodziewasz, przynajmniej ja miałem z tym straszne problemy, ale może zależy to także od wersji kompilatora. Wynika to niestety z tego że baskom był pierwotnie pisany dla AVRów klasy AT90Sxxxx i Mega, a rodzina Tiny nie jest do końca z nimi zgodna, w tym Timery. Niestety przy tworzeniu rodziny Tiny Atmel sie nie popisał, i jest w tych procesorach parę niespodzianek powodujących właśnie kłopoty.

Darek111
-
Posty: 3
Rejestracja: 11 sty 2010, 12:07
Lokalizacja: Namysłów

Post autor: Darek111 » 11 sty 2010, 20:33

To już wiem bo wczesniej to było napisane i na własnej skórze to przeżyłem np ATtiny 13 na 85 był OOPS. Ale co z moimi pytaniami zostana bez odpowiedzi? :cry:

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

Post autor: kayron » 11 sty 2010, 22:16

Muszę pogmerać, bo ja też z początku miałem problemy z Tiny45/85, jak znajdę o co w tym chodziło to ci odpisze. Uruchomienie tam PWMa nie jest az tak łatwe, bo jest tam sporo opcji jak to się ma zachowywać. Ja wykorzystywałem Timera jako bramkowany generator do kodowania w RC5.
Co do twojego pytania kiedy i jak startuje zatrzymuje się Timer to decydują o tym bity konfiguracyjne prekselera CS10 do SC13 dla T1 (rejestr TCCR1 w trybie ATTiny15). Jeżeli są wszystkie ustawione na zero to Timer 1 stoi, jeżeli wpiszesz jakąś inną wartość to uruchamiasz T1 z taktowaniem odpowiednim do wybranego podziału Fosc. To tyle w kwesti Startu/Stopu T0 i T1. Natomiast PWM wymaga ustawienia jeszcze paru innych bitów.

ODPOWIEDZ