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

Efekt do kominka na attiny13 [C]

matii_speed 28 Lut 2011 19:46 2666 18
  • #1 9217292
    matii_speed
    Poziom 16  
    Witam.
    Prosił bym nie pisać, że to się nie opłaca i że nie uzyskam żądanego efektu bo robiłem prototyp i jest ok:)
    Nie znam się aż tak na programowaniu wiec proszę o wyrozumiałość.
    Mam w domu kominek i chciałbym zrobić do niego taki bajer na zasadzie świeczki:
    https://www.elektroda.pl/rtvforum/topic864145.html
    Tyle, że bardziej rozbudowanego miało by to postać ramki do okoła wkładu na zewnątrz, jak na zdjęciu:
    Efekt do kominka na attiny13 [C] Efekt do kominka na attiny13 [C]
    Światło z diod (oczywiście całość wykonana w smd) padała by na ścianę kominka. Z początku myślałem żeby każda dioda sterowana była z osobnego µC. Na jeden "moduł" (attiny13 i Led) przypadały by 2 diody, jedna świeci ciągłym światłem, a 2 zasilana z µC. Liczba modułów ok 20. Włączanie tego, nastąpiło by po włączeniu przycisku bez żadnych dodatków.

    Moje pytania to:
    Czy da się sterować kilkoma niezależnymi diodami Led na tym procesorze?
    Czy da się to zrobić na innym procesorze np. attiny2313?
    Czy pomógł by mi ktoś przepisać to na język C?
    Może ma ktoś ciekawsze pomysły :)
  • #3 9219751
    SylwekK
    Poziom 32  
    Wszystko zależy jak skomplikowane masz to sterowanie. Jeden Attiny13 uciągnie maksymalnie 5 diod (6 jeśli przeprogramujemy reset). Attiny2313 o wiele więcej. Napisz coś więcej o sposobie świecenia jak to chcesz ewentualnie sterować, itp...
  • #4 9219870
    drzasiek
    Specjalista CNC
    1. Na attiny13 ci się nawet prosta funkcja if nie zmieści więc szkoda zachodu. Atmega8 kosztuje +-8 zł, masz mnóstwo portów I/O i w zasadzie nic cię nie ogranicza w kwestii mrugania diodami, jedynie wyobraźnia :)
  • #5 9220203
    piotrva
    VIP Zasłużony dla elektroda
    drzasiek napisał:
    1. Na attiny13 ci się nawet prosta funkcja if nie zmieści więc szkoda zachodu. Atmega8 kosztuje +-8 zł, masz mnóstwo portów I/O i w zasadzie nic cię nie ogranicza w kwestii mrugania diodami, jedynie wyobraźnia :)

    Atmega8 nie jest dobra. Popularna i moim zdaniem przereklamowana. Jeśli już to polecam pinowy odpowiednik ale nieco lepszy stosunek cena/jakość(możliwości) atmega168 lub 328. Choć takie sterowanie chyba i poczciwy tiny2313 uciągnie.
    Ceny nowej wersji atmega8 (atmega8a) w obudowie tqfp32 jak kolega pisze, a nawet nieco taniej
    Nie zmieści się jeden if? No to w takim razie kolega jest w błędzie, choćby takie coś w BASCOMIE, który optymalnym językiem nie jest:
    http://mirley.firlej.org/enkoder_obrotowy
    jest nawet więcej instrukcji niż jeden if :D
  • #6 9220313
    drzasiek
    Specjalista CNC
    piotrva napisał:

    Za 8 zł to może jest jak się kupuje setki sztuk, jeśli się mylę to proszę o linka do sklepu z taką ceną detaliczną na PW i kasuję tę część wiadomości

    Sory mój błąd. Przesdziłem, MEGA8 kosztuje nawet 5.99. Linka nie będę podawał, mam nadzieję, że kolega zna najpopularniejszy portal aukcyjny :) Podałem 8 zł bo niedawno przy okazji czegos kupowałem po 8 zł.
    Cytat:

    Nie zmieści się jeden if? No to w takim razie kolega jest w błędzie, choćby takie coś w BASCOMIE, który optymalnym językiem nie jest:
    http://mirley.firlej.org/enkoder_obrotowy
    jest nawet więcej instrukcji niż jeden if :D

    Dosłownie tydzień temu z ciekawości spróbowałem Atiiny13, chciałem zrobić zrobić dla próby migacz Led który po wciśnięciu jednego przycisku będzie migał szybciej. zmieściło się jedynie mruganie, jeśli dałem instrukcję warunkową to już było 130 % pamięci.
  • #7 9220345
    piotrva
    VIP Zasłużony dla elektroda
    a pisałeś w c czy bascom?
    na attiny13 można robić na prawdę małe-wielkie rzeczy
    no chyba że do migania użyłeś instrukcji typu _delay_ms(0x....); lub w bascomie Wait x :D
    co do cen to oczywiście zgodnie z umową zmieniam treść posta
  • #8 9220351
    hotdog
    Poziom 26  
    to kiepsko programujesz (no offense)... Przypuszczam że umieściłeś jakieś instrukcje _delay_xx w nie poprawny sposób.

    ATTiny13 ma jak wiadomo ograniczony flash, ale na pewne operacje wystarczy. Z powodzeniem można nim np wykonać nadajnik kodów IR itp.

    Myślę że programowy PWM na wszystkich dostępnych pinach, jest jedną z tych, które bez problemu można na nim wykonać. Wiadomo że z ograniczoną częstotliwością, ale na pewno z na tyle dużą, że ludzkie oko nie będzie w stanie migotania zauważyć.
  • #9 9220761
    SylwekK
    Poziom 32  
    drzasiek napisał:
    1. Na attiny13 ci się nawet prosta funkcja if nie zmieści więc szkoda zachodu. Atmega8 kosztuje +-8 zł, masz mnóstwo portów I/O i w zasadzie nic cię nie ogranicza w kwestii mrugania diodami, jedynie wyobraźnia :)


    Nie no panie, co pan :D Zapraszam do obejrzenia mojego przycisku szyfrowego (niedawno zamieszczony w dziale DIY) tam to jest dopiero if-ów ;)

    Żeby nie tak całkiem offtopic... dla autora projektu myślę, że atmega48 lub 88 mogłaby wystarczyć - pinologia również jak w mega8, a i cena też ok.
  • #10 9222470
    matii_speed
    Poziom 16  
    Witam, dziękuje za zainteresowanie moim tematem:)
    Efekt ma być taki że diody (każda osobno) mają migać w losowy sposób. Całość ma być zainstalowana na listwach ok 1,5 cm szerokości więc procesor nie mógł by być za duży. Dlatego spodobał mi się tiny 13 lub tiny 2313 (bo takie mam ) ewentualnie mega8 ale to ostatecznie:) Może ktoś zna bardziej odpowiednie procesory do tego zadania. Ale na programator stk 200.
    Myślę że te 5 diod z jednego procesora by wystarczyło. Prototyp napisany był w asemblerze którego całkowicie nie kumam. W stopniu podstawowym umiem (uczę się) C.
    kod w asemblerze:
    
    
    ; Henryk Więsyk
    ; 16.10.2007
    ; wersja 1.0
    ; Dioda do masy
    ; wewnętrzny oscylator ustawiony na 1MHz CKSEL1=1 CKSEL0=0 CKDIV8=0
    
    .include 	"tn13def.inc"
    
    ;*********************************************
    ; Definicje
    ;*********************************************
    
    .def	czas1	=R17	; licznik opóĽnienia
    .def	czas2	=R18	;
    .def	temp	=R19	; bajt dla fazy
    
    .cseg
    .org	$000
    		rjmp	start			
    		reti
    		reti
    		reti	
    		reti					
    		reti					
    		reti
    
    
    ;*********************************************
    ; Inicjalizacja
    ;*********************************************
    
    start:	cli			; blokada przerwań
    	ldi	temp,0b00000001	; linia "0" wyjście
    	out	ddrb,temp		; zapis do rejestru
    
    	sbi	$08,7			; wyłącz komparator
    	
    	ldi	temp,0b10000001	; ustawienie preskalera 
    	out	clkpr,temp		; 
    
    	ldi	temp,0b11000001	; tryb Fast PWM
    	out	tccr0a,temp		;
    
    	ldi	temp,0b00000010	; preskaler timera 0, porównanie a
    	out	tccr0b,temp		; 
    	
    	ldi	temp,0x06		; zapis wartości do 
    	out	ocr0a,temp		; rejestru porównania
    	
    	ldi	temp,0b00000010	; ustawienie przerwania
    	out	timsk0,temp		; od przepełnienia 
    	
    	ldi	ZL,low(Jasnosc<<1)
    	ldi	ZH,high(Jasnosc<<1)
    
    	sei				; odblokowanie przerwań
    
    ;*****************************************
    ; g¦ˇwna petla
    ;*****************************************
    main:
    	dec		czas1			; pętla odliczająca czas
    	brne		main
    	dec		czas2
    	brne 		main
    
    	lpm		temp,Z+
    	com		temp			; dla diody dołączonej do plusa
    	out		OCR0A,temp
    	ldi		temp,low(Jasnosc<<1)+140	
    	cp		ZL,temp
    	brne		main
    	ldi		ZL,low(Jasnosc1<<1)
    	ldi		ZH,high(Jasnosc1<<1)
    	ldi		czas1,0
    	ldi		czas2,0
    
    Swieczka:
    	dec		czas1
    	brne		swieczka
    	dec		czas2
    	brne 		swieczka
    	lpm		temp,Z+
    	com		temp			; dla diody dołączonej do plusa
    	out		OCR0A,temp
    	ldi		temp,low(Jasnosc1<<1)+200	
    	cp		ZL,temp
    	brne		swieczka
    	ldi		ZL,low(Jasnosc<<1)
    	ldi		ZH,high(Jasnosc<<1)	
    	ldi		czas1,0
    	ldi		czas2,0
    	rjmp		main
    
    ;wartości współczynnika wypełnienia
    
    Jasnosc:
    
    .DB 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100
    .DB 10 , 10 , 10 , 255 , 0 , 30 , 25 , 240 , 2 , 5
    .DB 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10
    .DB 100 , 66 , 90 , 120 , 250 , 160 , 10 , 22 , 230 , 67
    .DB 134 , 234 , 56 , 76 , 10 , 10 , 10 , 10 , 100 , 200
    .DB 0 , 100 , 0 , 200 , 250 , 100 , 10 , 40 , 200 , 250
    .DB 10 , 100 , 10 , 40 , 80 , 190 , 250 , 137 , 89 , 250
    .DB 255 , 190 , 160 , 20 , 35 , 58 , 36 , 98 , 82 , 16
    .DB 0 , 250 , 0 , 123 , 36 , 159 , 178 , 95 , 12 , 100
    .DB 49 , 169 , 250 , 25 , 89 , 200 , 58 , 236 , 250 , 100
    .DB 10 , 250 , 20 , 250 , 30 , 255 , 90 , 10 , 36 , 25
    .DB 30 , 50 , 255 , 200 , 100 , 136 , 63 , 150 , 105 , 56  
    .DB 250 , 0 , 13 , 200 , 6 , 18 , 63 , 185 , 200 , 200
    .DB 200 , 150 , 200 , 200 , 150 , 100 , 80 , 50 , 10 , 0		
    
    .cseg
    .org	$0100
    Jasnosc1:
    .DB 0 , 10 , 20 , 30 , 40 , 50 , 0 , 30 , 20 , 10
    .DB 0 , 0 , 80 , 0 , 0 , 0 , 100 , 0 , 0 , 0
    .DB 0 , 10 , 30 , 50 , 70 , 50 , 40 , 30 , 20 , 10
    .DB 0 , 0 , 0 , 30 , 60 , 90 , 60 , 30 , 0 , 0
    .DB 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    .DB 0 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 60 , 50
    .DB 0 , 40 , 30 , 20 , 10 , 0 , 0 , 0 , 0 , 0
    .DB 0 , 10 , 20 , 30 , 40 , 50 , 60 , 60 , 60 , 70
    .DB 0 , 50 , 30 , 10 , 0 , 0 , 0 , 50 , 100 , 0
    .DB 0 , 10 , 30 , 70 , 0 , 0 , 0 , 0 , 120 , 80
    .DB 0 , 0 , 30 , 90 , 90 , 40 , 0 , 0 , 120 , 80
    .DB 0 , 10 , 80 , 50 , 0 , 0 , 0 , 0 , 80 , 30
    .DB 0 , 20 , 120 , 80 , 20 , 0 , 0 , 0 , 80 , 0
    .DB 0 , 10 , 40 , 80 , 40 , 0 , 0 , 0 , 90 , 120
    .DB 0 , 10 , 90 , 60 , 20 , 0 , 0 , 0 , 120 , 70
    .DB 0 , 10 , 60 , 40 , 20 , 0 , 0 , 0 , 90 , 0
    .DB 0 , 10 , 30 , 60 , 100 , 50 , 20 , 10 , 0 , 0
    .DB 0 , 90 , 50 , 10 , 0 , 0 , 150 , 100 , 0 , 0
    .DB 0 , 150 , 100 , 30 , 40 , 50 , 60 , 80 , 60 , 40
    .DB 0 , 10 , 80 , 100 , 0 , 0 , 80 , 120 , 0 , 0
    

    Jeden minus tego projekty to efekt całkowitego wygaszania się diody.
    Pozdrawiam.
  • #11 9222555
    SylwekK
    Poziom 32  
    Jest jeszcze jeden patent... można przecież połączyć diody w matryce i wtedy takim attiny2313 mógłbyś wysterować nawet 64(!) diody. Program, który zajmował by się tylko losowym błyskaniem (np. coś jak iskierki) jest naprawdę prosty i nawet programując w BASCOM niewiele miejsca by zajął. Wykorzystałem taki sposób w swoim metronomie i kiedy robiłem testy zarzuciłem z ciekawości prosty program do niezależnego błyskania diodami (w zasadzie to była szybka modyfikacja istniejącego programu metronomu) tyle, że dane nie były losowe tylko umieszczone w liniach DATA i wszystko nieco przyspieszone - efekt fajny :) .Zrobić z tego pseudo los to już żaden problem.
  • #12 9222925
    matii_speed
    Poziom 16  
    Tylko że matryca raczej odpada, bo całość ma być wykonana na pcb o szerokości ok 1,5 cm. Wydaje mi się że lepiej jak by to było kilka nie zależnych układów.

    Pozdrawiam.
  • #13 9223039
    LordBlick
    VIP Zasłużony dla elektroda
    matii_speed napisał:
    Prototyp napisany był w asemblerze którego całkowicie nie kumam.
    Tylko dlatego, że jest tak napisany, że nawet osobom obytym z asemblerem też nie jest łatwo w niego wnikać...
  • #14 9223303
    matii_speed
    Poziom 16  
    A czy jest jakaś prosta metoda przepisania tego kodu na C? I zrobienia go na kilka diod? Bo z tego co wiem kod w C zajmuje o wiele mniej miejsca niż asemblerze, nie mylę się?
  • #15 9223381
    LordBlick
    VIP Zasłużony dla elektroda
    matii_speed napisał:
    Bo z tego co wiem kod w C zajmuje o wiele mniej miejsca niż asemblerze, nie mylę się?
    Kod w asemblerze jest najmniej zajmującym miejsce, bo jest tłumaczony bezpośrednio na rozkazy procesora.
    Co do przepisania na C, to co ja napisałem w asemblerze jestem w stanie przepisać w C w ciągu niezbyt dużego czasu, bo używam w kodzie zawartego już w kompilatorze asemblera pre-procesora C, co mi zdecydowanie ułatwia życie. Przykład - temat obok:
    https://www.elektroda.pl/rtvforum/topic1929625.html#9222887
    Przepisywanie po kimś to już nie tak łatwo...
    Przeważnie jedna operacja w C to 1-3 rozkazy asemblera...
  • #16 9228654
    matii_speed
    Poziom 16  
    Czyli mam rozumieć że najlepiej zostać przy tym procesorze i kodzie w asemblerze żeby nie utrudniać sobie życia? To co zrobić (zmienić w kodzie żeby każdy procesor zaczynał prace od innej wartości? Bo wydaje mi się ze te wartości nie są tutaj wybierane losowo. Albo da się tak zmienić kod żeby każdy procesor startował z jakim małym opóźnieniem?
    Np będzie 10 Procków - po 5 na każdą stronę, licząc od dołu - środka ramki, Czasy opóźnienia załączania będą się zwiększały, możne dało by to efekt trochę podobny, jakby ta ramka się po kolei rozpalała.
  • #17 9242319
    manekinen
    Poziom 29  
    Panowie proponujecie użycie nie wiadomo jakich procesorów do migania diodami!

    Spokojnie można to wykonać na attiny13. matii_speed poczytaj sobie co to jest Charlieplexing. Za pomocą 6 pinów (attiny13) możesz sterować 30 diodami! n*(n-1)

    A dobrze wykombinowany kod może być nawet w bascomie i zrobi to co trzeba, zobacz przykład.
  • #18 9244487
    matii_speed
    Poziom 16  
    Witam.
    manekinen tak właśnie kombinuje na Tiny 13 tyle że, uczę się programować w C i narazie "profesjonalnego" kodu nie dam rady zrobić :( Tak więc liczyłem na gotowe projekty w celu zrozumienia zasady działania. Od czegoś trzeba zacząć, a właśnie chce wykorzystać mały procesor i wycisnąć z niego jak najwięcej.
  • #19 9247222
    Defozo
    Poziom 17  
    matii_speed napisał:
    Witam.
    manekinen tak właśnie kombinuje na Tiny 13 tyle że, uczę się programować w C i narazie "profesjonalnego" kodu nie dam rady zrobić :( Tak więc liczyłem na gotowe projekty w celu zrozumienia zasady działania. Od czegoś trzeba zacząć, a właśnie chce wykorzystać mały procesor i wycisnąć z niego jak najwięcej.

    Witam, wspomniany wyżej projekt elektronicznej świeczki to nie jedyny projekt na elektrodzie:
    Link (w połowie strony źródła w bascomie)

    Pod koniec 2010 roku również zrobiłem swoją elektroniczną świeczkę (2 diody) w C na ATtiny13.

    Może się przyda:
    Kod swieczka.c:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Życzę powodzenia.
    Defozo
REKLAMA