logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR Assembler Ściemniacz - prośba o sprawdzenie kodu

insectteam 26 Sty 2010 21:40 2999 16
REKLAMA
  • #1 7597375
    insectteam
    Poziom 11  
    Witam !

    Postanowiłem stworzyć sobie ściemniacz, taki jak ze strony : http://rejestr.republika.pl/strony/avr_regulator.html

    Posiadam sporo Attiny13 więc postanowiłem przerobić kod na ten właśnie procesor ( przeróbka polegała na zamianie nazw rejestrów z Attiny12 na Attiny13 bo te różnią się trochę ) - niestety o assemblerze pojęcia mam tak niewiele ...

    W załączniku pliki .asm oraz skompilowany .hex - tu pojawia sie moja prośba -> czy ktoś mógłby sprawdzić poprawność tej przeróbki ?? Co fakt plik skompilował się bez kłopotu ale pewności nie mam co do pełnej poprawności zadziałania.

    Prośba powstała w wyniku tego, że zablokowałem sobie już 3 Attiny13, a nie mam programatora HV, żeby je odblokować - test z kolejnymi jest o tyle niebezpieczny że trzeba tam włączyć Fusebit od resetu co znów spowoduje blokadę.

    Tak przy okazji czy ktoś przysłałby mi screen shot z PonyProg 2000 jak właściwie powinny wyglądać fusebity do zaprogramowania w tym projekcie ??

    Dodam jeszcze że cały układ nieco przerabiam - konkretnie to zasilany będzie z 5V a jako detekcja zera będzie zastosowany układ LTV814 + 2 rezystory .

    Pozdrawiam
  • REKLAMA
  • #2 7597724
    Menuet
    Poziom 19  
    Witam,
    Programu nie przeglądałem, więc w tej sprawie się nie wypowiem, lecz zauważyłem inny problem jaki masz, mianowicie w układzie oryginalnym procesor pracuje z zewnętrznym kwarcem, a niestety ATTINY13 nie posiada takiej opcji, więc możesz alno wykorzystać wewnętrzny generator RC (4.8 lub 9.6MHz) i odpowiednio przerobić program, albo zastosować zewnętrzny generator 4MHz podpinany do jednego pinu. W obu przypadkach pozostają Ci 1 lub dwa wolne piny, przez co jak zmienisz definicje co gdzie jest podłączone to nie będziesz musiał wykorzystywać pinu z resetu jako pinu we/wy, a co w związku z tym będziesz mógł zaprogramować procka więcej niż raz przez ISP.

    Pozdrawiam, Menuet.
  • #3 7597790
    insectteam
    Poziom 11  
    ... no i widzę że zaczęły się schody ... jak wspomniałem - moje pojęcie o assemblerze jest znikome więc nie mam pojęcia co i jak zmienić w kodzie apropo tego Attiny :(
  • #4 7599375
    skywalker
    Poziom 22  
    Możesz zbudować zewnętrzny zegar 4MHZ na bramce cmos i podać go do Attiny13 lub zamienić pętle opóźniające , jeśli się da oczywiście . Przy zegarze 4.8 będziesz miał do zliczenia o "kilka impulsów" więcej aby uzyskać ten sam czas. Przykładowo w programie autora jest :
    
    ldi	licz1,0x32	; początkowa wartość
    p1:	ldi	licz2,0x3B	; odliczenie 2.25 msek
    p2:	dec	licz2
    	brne	p2		; skocz jeśli nie zero
    	dec	licz1		; druga pętla
    	brne	p1	
    

    W nocie katalogowej można wyczytać poszczególne czasy trwania rozkazów i rozkazy.
    Asemblera można się nauczyć i nie jest to takie straszne ;).
    Sumarycznie pętla złożona z rozkazów dec brne trwa: licz2 * 3 cykle * czas trwania cyklu (1/fclk ). Dla danych powyżej fclk = 4000 kHz więc t=0,25us ,pętla trwa 59 * 3 cykle, daje to 177 cykli po 0,25us. Pętla licz1 wykonuje się 50 razy i trwa 3 cykle + czas trwania pętli2 (która jest w środku) czyli (177+3) cykli * 50 * 0,25us = 2.25ms

    Dla zegara 4.8 Mhz przybliżony czas można uzyskać dla licz2 = 0x47 , podobnie należy uczynić z pozostałymi pętlami.
  • REKLAMA
  • #5 7600045
    asembler
    Poziom 32  
    Czy aby na pewno program w załaczniku dziala?
  • #6 7600285
    insectteam
    Poziom 11  
    ... popróbuję pozamieniać te wartości dziś wieczorem i zobaczę co z tego wyniknie.

    Co do pytania czy program działa - został on pobrany ze strony jak w pierwszym poście więc sądzę że działa - niesetety nie mam Attiny12 więc nie mam jak sprawdzić oryginału
  • REKLAMA
  • #7 7600441
    asembler
    Poziom 32  
    Dlatego pytam bo on ma prawo dzialać ale tylko cudem:-)
  • REKLAMA
  • #8 7600491
    insectteam
    Poziom 11  
    to może przed rozpoczęciem eksperymentów spytam co jest nie tak z tym softem, że działać nie powinien - nie chciałbym naciąć się na "niedorobiony" projekt ...
  • #9 7601316
    asembler
    Poziom 32  
    Ja soe nie znam, ale skoro uzywane są przerwania to trzeba jakis stos zadeklarowac.
    Przerwania uzywaja tych samyc rejestrow oraz sa rowniez uzywane w programie głownym
    W srodku przerwan zmieniaja sie znacznik w rejestrze SREG co moze miec znaczenie przy wykonywaniu programu głownego i.t.d. i.t.p.
    To chyba nie moze dzialac ale cuda sie zdarzają:-)
  • #11 7603858
    skywalker
    Poziom 22  
    Najlepiej uruchomić testowo bez 220V i sprawdzić czy działa odbiór RC5. Zamiast triaka sterowało zwykłym ledem, ew. zmienić trochę kod.Układ może działać mimo braku inicjowania stosu bo mikroprocesor zawsze ma jakieś wartości w rejestrach również w SPL.Aby zainicjować stos wystarczy dodać 2 linijki (dostępne również w nocie katalogowej)
    
    RESET: ldi
    out
    r16, low(RAMEND);; SPL,r16
    

    O ile program będzie można wgrać 2 razy to można pokusić się o uruchomienie go z poprawnie zainicjowanym stosem i bez.
    W obu procesorach Attiny12 i 13 stos trzeba inicjować zwłaszcza gdy odkłada się na niego jakieś rejestry ;).
    Kolega "Asembler" daje do zrozumienia że program może mieć braki, ja twierdzę że może działać nawet z dużymi "błędami" kwestia szczęścia .
  • #12 7609060
    insectteam
    Poziom 11  
    Mimo prób wielu ciągle porażka - zblokowałem se kolejne 4 Attiny13 - muszę chyba posiedzieć nad assemblerem w spokoju ducha, a ten projekt zrobić nieco dookoła czyli : Attiny13 jako odbiornik RC5 ( w Bascomie ) natomiast jako układ wykonawczy LS 7232 <- układ ten robi dokładnie to co chciałem tyle że bez obsługi IR ...

    Wrócę zapewne niebawem do całkowitego rozwiązania problemu dostosowania softu z Attiny12 na 13 i skończę ten projekt - musi mi tylko dyńka przestać parować od myślenia, no i jakiś kursik assemblera se zafundować na szybko.

    Dziękuję puki co wszystkim za pomoc i jak tylko odpalę ten projekt to dam znać
  • #13 7609091
    skywalker
    Poziom 22  
    A nie lepiej wskoczyć na "chwilę" na atmega8 czy coś większego co się "nie blokuje" i można swobodnie po ISP programować więcej niż 2 razy ;). Zwłaszcza że cena to 4zł a jak układ zadziała z RC5 i pilotem to dopiero męczyć Attiny12 lub podobne.
  • #14 7609425
    insectteam
    Poziom 11  
    No właśnie chcę tak zrobić - zamówiłem już 2 Atmegi8 i 2 Atmegi 16. Pobawię się nimi a zawsze można je do czegoś innego zastosować bez większych problemów... no i zestaw ratunkowy ( HV ;) ) do tych 13 chcę na dniach zbudować - tak jak pisałem nie odpuszczę tego projektu i skończę go tylko potrzebuję czasu i nauki :)
  • #15 7621295
    asembler
    Poziom 32  
    Podobnie mialem z attiny13 i okazło sie ze to wcale nie zablokowany procek tylko ustawialem w programia niską czestotliwosc oscylatora, a jak wiadomo przy niskiej czestotliwosci takze programator musi chodzi odpowiednio wolno. Sprawdź moze to to?
  • #16 7623423
    insectteam
    Poziom 11  
    Niestety, programator nawet ich nie wykrywa więc raczej zblokowany ...
REKLAMA