ATtiny2313 sterowanie LED - kod


Witam. Mam problem. trochę dziwny bo nie miałem wcześniej styczności z programowaniem układów, a muszę zaprogramować akurat coś takiego. Przeglądałem kilka stron w necie, nic z tego nie rozumiem, no prawie nic bo udało mi się przerobić jeden kod na coś takiego co mi potrzebne. Posiadam programator zbudowany wedlug schematu Dybkowskiego, i programy ISP Programmer, ISP Flash Programmer i Bascom AVR.

Oto kod"

Config Portd = Output
Config Portb = Output
 
Config Pind.6 = Input
 
Portd = 127
Portb = 255
 
Dim Linijka As Word
 
 
Do
 
Linijka = &B0000001100000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000011110000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000111111000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0001111111100011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0011111111110011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0111111111111011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B1111111111111111
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0111111111111011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0011111111110011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0001111111100011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000111111000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000011110000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000001100000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000010010000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000100001000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0001000000100011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0010000000010011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0100000000001011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B1000000000000111
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0100000000001011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0010000000010011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0001000000100011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000100001000011
Gosub Przypisanie
Gosub Opoznienie
 
Linijka = &B0000010010000011
Gosub Przypisanie
Gosub Opoznienie
 
Loop
 
Przypisanie:
Portb.0 = Linijka.15
Portb.1 = Linijka.14
Portb.2 = Linijka.13
Portb.3 = Linijka.12
Portb.4 = Linijka.11
Portb.5 = Linijka.10
Portb.6 = Linijka.9
Portb.7 = Linijka.8
Portd.0 = Linijka.7
Portd.1 = Linijka.6
Portd.2 = Linijka.5
Portd.3 = Linijka.4
Portd.4 = Linijka.3
Portd.5 = Linijka.2
Return
 
Opoznienie:
Waitms 80
Return
 End

zastanawia mnie to - &B0000010010000011 bo z tego co zrozumialem jest tu 16 wyjsc, a wedlug ukladu jest 14.

Nie wiem o co chodzi z tymi fuse-bitami. W sumie to nie wiem nic procz tego jak podlaczyc uklad pod programator;/

Jesli ktos bylby tak mily i mi rozjasnil troche to bym byl wdzieczny...
Pozdrawiam




Portret użytkownika mirley

Re: Diody

Dobra... podałeś jakiś tam program a po co.... pisałem ci wcześniej żebyś napisał co chcesz zrobić. Po co piszesz że nie umiesz programować, jakbyś umiałtonie musiał byś prosić o pomoc.

Napisz to co ważne:
Jaki masz procesor, jaki schemat do tych diod, i najważniejsze co i jak ma migać, z jaką szybkością itp

W tym programie wyżej masz zmienną word (liczba - 16 bitów) więc jak przypisujesz do niej wartość to musisz napisać $Bxxxxxxxxxxxxxxxx lub wpisać wartość dziesiętną. To że masz mniej wyjść nie ma z tym nic wspólnego. Jak widzisz dwa najmłodsze bity zmiennej są do niczego nie wykorzystane.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

OK. sory za stwarzanie

OK. sory za stwarzanie problemu.
Mam ATtiny2313. Schemat do tego układu:

Efekt świecenia diod:

http://www.youtube.com/watch?v=sq9ITADmMjY&feature=related

Szybkość taka jak na filmiku

Portret użytkownika mirley

Re: Efekt led

No to tak.... tutaj masz fragment programu w bascomie:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 4000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
'Config Timer0 = Timer , Prescale = 8
'Enable Timer0 : On Timer0 Prztimer0 
'Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim leds as word 'stan diod 
Dim licznik as byte
dim X as word
'*************  Zmienne Koniec  ****************
leds = &B0011111111111111 ' stan początkowy, 1 oznacza diodę zgaszoną, 0 oznacza włączoną bo zwarcie do masy powoduje przepływ prądu
                          ' dwa najstarsze bity (z lewej strony) sa bez znaczenia bo masz 14 diod
'**************  Petla glowna ******************
'***********************************************
Do
 Select Case Licznik
   Case 0:  leds = &B0011111111111111
   Case 1:  leds = &B0011111111111111
   Case 2:  leds = &B0011111111111111
   Case 3:  leds = &B0011111111111111
   Case 4:  leds = &B0011111111111111
   Case 5:  leds = &B0011111111111111    
 end select
 
 incr licznik
 if licznik = 6 then licznik = 0 ' liczy od 0 do 5
 
 waitms 80 'czas zwłoki w ms
 
 X = leds mod 256
 portb = X
 X = leds /256
 portd = X
 
Loop
End
'************ Petla glowna Koniec **************

Na schemacie widzę 3V, zasilanie musi być 5V, chyba że masz wersję procesora z literką "L". Diody potrzebują rezystora ograniczającego prąd, typowo 330R (każda dioda jeden rezystor)

efekt musisz sobie sam zaprogramować wpisując kolejne linijki do instrukcji select case, w każdym kroku ustawia się inny stan na diodach

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

wielkie dzieki. tylko co ja

wielkie dzieki. tylko co ja mam dalej z tym zrobic? rozumiem ze przed "petla glowna" mam wpisac to jak maja sie zapalac diody?

procek jest poprostu 2313, moze zasilanie na schemacie dotyczy tego at90...
co do rezystora to na 1 kanal maja byc po 2 diody, to wtedy inny parametr rezystora ma byc/jeden rezystor do dwoch diod/jeden rezystor do jednej diody ?

Portret użytkownika kuba

Re: Efekt Led

a) Przed "pętlą główną" nic nie ustawiasz. Wybierasz sobie ilość różnych kombinacji, w jakich mają się zapalać diody (np. w oryginalnym kodzie, który zamieściłeś, było ich 24) i wstawiasz tą liczbę zamiast x w linijce

if licznik = x then licznik = 0 ' liczy od 0 do x

Następnie umieszczasz odpowiednią ilość instrukcji case opisujących jak mają się zapalić diody w każdym kolejnym kroku:

Select Case Licznik
   Case 0:  leds = &B0001111111111111
   Case 1:  leds = &B0010111111111111
   Case 2:  leds = &B0011011111111111
   Case 3:  leds = &B0011101111111111
   Case 4:  leds = &B0011110111111111
   Case 5:  leds = &B0011111011111111
   Case 6:  leds ...
 end select

Wielokropek (...) powyżej oznacza, że resztę kodu powinieneś sobie sam dopisać. Zera oznaczają diody zapalone (pomijając dwa pierwsze, bo one są nie podłączone według Twojego schematu).

b) 2313 wymaga zasilania +5V, więc to na schemacie jest nieaktualne - podłącz układ do 5V, tylko najpierw wlutuj rezystory do diod!
Z Twojej wypowiedzi

Quote:
co do rezystora to na 1 kanal maja byc po 2 diody, to wtedy inny parametr rezystora ma byc/jeden rezystor do dwoch diod/jeden rezystor do jednej diody ?

wynika, że nie tylko nie miałeś dotąd styczności z mikrokontrolerami, ale i z elektroniką w ogóle, nie?
Dwie diody równolegle potrzebują dwa razy większego prądu, stąd
- albo łączysz je bezpośrednio do zasilania i przez 150R lub 180R do portu tinny,
- albo łączysz bezpośrednio do tinny i każdą diodę niezależnie przez 330R do masy

-

Zepsuje się wszystko, co tylko może.
Zawsze tak, żeby uczynić najwięcej szkód w najmniej spodziewanym momencie.

Portret użytkownika gosc

no to już zrobiłem, i na 24

no to już zrobiłem, i na 24 przejscie z powrotem do 0.
z elektronika mialem stycznosc wczesniej, ale nie wiem jak to moze "wplywac" na uklad wiec wolalem spytac dla pewnosci.

Dzieki za wskazowki, ale dalej nie wiem jak to wrzucic na procka, i czy jesli przez bascoma to poprostu przesle to bedzie wszystko, czy musze jeszcze cos przestawiac w fuse-bitach itd?

Portret użytkownika mirley

RE: Programowanie

A jaki masz programator? czytałeś opis http://mirley.firlej.org/jak_zaprogramowac_pierwszy_avr ? Przestaw sobie w programie $crystal = 4000000 na $crystal = 1000000 i nie będziesz musiał fusebitów zmieniać.

jeśli zrobisz sobie kable programujący na LPT to zaprogramujesz bezpośrednio w bascomie na podstawie opisu co podlinkowałem wyżej

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

Czytalem. programator mam ten

Czytalem. programator mam ten ze strony Dybkowskiego.
Mam kabel na LPT. Rozumiem ze wystarczy skorzystac z opcji "wyslij do procka" i juz jest zaprogramowany tak?
A jest jakas mozliwosc zeby w programie podejrzec jaki efekt ma ulozony program? czy dopiero jak go wrzuce na procka to po podlaczeniu bede widzial?

Portret użytkownika mirley

Re: Programowanie

W bascomie jest symulator programowy ale nigdy czegoś takiego nie używałem. Programujesz i widzisz co się dzieje w czasie rzeczywistym na procku, tak jest najpewniej. Podłacz sobie programator do tej płytki z diodami i w kilka sekund po zaprogramowaniu widzisz co się dzieje. Nie musisz nic przepinać

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

no i pojawil sie problem.

no i pojawil sie problem. zlozylem 3 programatory i na kazdym to samo błąd "ID: FFFFF" i nie moze rozpoznac procka, albo "at 00000", jak mu mimo wszystko probowalem wrzucic program to "reading" przelecialo normalnie, a pozniej zawiesilo sie na bodajze ROM i nie wrzucal pliku BIN.
Ale nie wiem o co chodzi z tym ze okienko SIZE jest zaladowane w polowie, a pod spodem "programmed 5"... o co moze chodzic?

Portret użytkownika mirley

Re: Programowanie

Po pierwsze jeśli wystepuje błąd z identyfikacją procesora to bezsensem jest próba wgrywania programu, jego odczyt itp. Normalne że się zawiesiło.

pasek SIZE pokazuje rozmiar programu w stosunku do procka, a programmed 5 pokazuje próby programowania, nie jest to nic istotniego.

Zajmij sie lepiej sprawdzenie poprawności twojego kabla programującego:
1. Ustawienia w biosie portu LPT, czy jest przestawiony na ECP, a nie np na SPP?
2. Czy w konfiguracji bascoma jest ustawiony "Sample .....programmer"
3. Czy masa GND między procesorem a LPt jest podłączona
4. Czy zasilanie do procesora jest dokładnie 5V względem masy GND
5. Czy kabel programujący jest zrobiony na odpowiednich pinach LPT, porównaj numery wyprowadzeń na schemacie i na wtyczce, nie sugeruj sie kształtem wtyczki na schemacie
6. Poszukaj zwarć.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

hm.. wedlug twojego

hm.. wedlug twojego programatora... na pierwszym zdjeciu z pinu m.in. 25 wychodzi masa z LPT, i idzie ona do dalszej czesci programatora, i jest linia w dol do.. masy... ta mase mam tez pociagnac z USB?

-----

złożylem programator z tej strony... przez pospiech wlozylem w podstawke odworotnie uklad. po podlaczeniu zasilania usb (sam +) pojawil sie magiczny dzwiek windowsa ze podlaczono nowe urzadenie, wczesniej tego nei bylo. no i rowno z tym zacial sie komp. odlaczylem usb, pojawil sie dzwiek i komp sie "odwiesil". jak zauwazylem ze UC jest odwrotnie wlozony to go przelozylem, i melodyjka sie nie pojawila. i jak nie wykrywal tak nie wykrywa. czy przez ta zamiane uszkodzil sie procek?

Portret użytkownika kretman4

złożyłem programator (ten bez

złożyłem programator (ten bez hct244), port w biosie jest ustawiony na ECP, w necie wygrzebalem ze porty w xp bywaja zablokowane wiec dla pewnosci uzylem programu userport (zaraz pewnie padnie pytanie, po co?). wlozylem nowy procek i dalej cisza...

port lpt jest sprawny jakby co.

Portret użytkownika mirley

Re: Programowanie

Masa ma być podłączona do LPT, tak jak na schemacie, piny masy mają być zwarte we wtyczce, tak jak na schemacie, potem z tego jeden kabelek do uC. Jeśli procek masz nowy to nie trzeba żadnego kwarca i od razu powinno być ok. Zasilanie jesli podłączasz do USB to zewrzyj też masę do masy procka i +5V do zasilania. Co prawda robisz wtedy pętlę masy ale w tym przypadku nie powinno to zrobić problemu.

podłaczając na odwrót zrobiłeś prawdopodobnie zwarcie na USB, popłynął za duży prąd i kontroler się wyłączył. Windows się zawiesił jak to windows.... nowe urządzenie to mogło być coś co masz podpięte na tym samym kontrolerze USB. Po podłaczeniu pierwsze co sprawdź to czy na odpowiednich pinach procka masz 5V i czy masa przewodzi od wtyczki LPT do pinu procka. Mógł sie uszkodzic procesor więc zaopatrz się w kolejny dla testów. Co prawda mi się nigdy nie udału spalić uC ale takie coś też się mi nie zdarzyło

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

zmienilem w opcjach na "AVR

zmienilem w opcjach na "AVR ISP programmer" i nei wywala mi juz bledu "ID FFFFF", potem pojawia sie tylko "at90... <> attiny2313", no ale wchodze w Verify i cos tam sobie robi i wywala "Difference at 00000" i na tym stanalem jak narazie...

----

sprawdzalem jakie sa napiecia na poszczegolnych pinach po podlaczeniu procka do "programatora" (wszystko sprawdzalem z masa) i mam nastepujace napiecia:
VCC 4,95V
RESET 4,89V
SCK 3,32V
MISO 3,32V
MOSI 4,89V
X1 0V
X2 0V

-----

Tak myslalem czy nie zrobic jeszcze raz programatora dybkowskiego i w bascomie przestawic na ISP programmer, ale skoro na tak prostym nie dziala to mysle ze moje dzialanie byloby bez sensu.

Portret użytkownika mirley

Re: Programowanie

Jak masz w końcu ten programator? Zwykły kabel programujący taki jak tu opisałem http://mirley.firlej.org/jak_zaprogramowac_pierwszy_avr ?

Jeśli tak to po co przestawiasz typ programatora, ma być ustawiony tak jak na zdjęciu na "Sample elektronics programmer", jeśli tak nie działa to coś nazdziwiałeś.

Napięcie zasilania jest Ok, reszta pinów nic mi nie mówi. Możesz sobie zrobic inny programator ale lepiej zrób sobie STK200 z mojej strony, ten z HCT.... Nie przełączaj głupich opcji na chybuł trafił bo tracisz czas.

Ps. Nie pisz kilku swoich postów jeden pod drugim, użyj przycisku edytuj..... napisałeś 3 posty zamiast zrobić tak jak wyżej, przecież nikt w międzyczasie nic nie odpisał

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

tak, zrobilem ten na kablu z

dobra, zlozylem ten twoj stk200. na ustawieniu "sample" nie wykrywa nic, jest blad "id fffff" i ten o zmianie procka. przestawilem w opcjach na programator stk200. na poczatku bylo tylko to ze zmiana procka, wiec przestawilem na attiny, verify wywalilo id 00000, probowalem na zmiane opcji az w koncu udalo sie wrzucic problam, weryfikacja zadzialala, ale nie na sample tylko stk200. no dobra, wrzucilem program. odpalilem uklad, i dziala to tak, zamast chodzic jak na filmiku to zapala sie 1,2,3,4,5 (i im wiecej diod sie zapala tym slabiej wszystkie swieca), pozniej gasnie, zapala sie ktoras dalej, gasnie zapalaja sie wszystkie oprocz jakis dwoch, pozniej zapala sie ostatnia, zapalaja sie wszystkie. w skrocie mowiac od 6 do 12 i z powrotem diody procek glupieje i robi to co chce a wracajac od 5 do 1 dziala jak nalezy ale wtedy im mniej diod sie swieci tym mocniej swieca... o co tu chodzi ??

Portret użytkownika mirley

Re: Programowanie

Masz procesor tiny2313 on moze max 20MHz działać na zewnetrznym kwarcu ale to tutaj jest bez znaczenia. Nie trzeba dołączać żadnego kwarca, gdyz fabryczny mikrokontroler pracuje na 1MHz z wewnetrznego źródła. To 1.000.000 masz tylko do programu na początku wpisać żeby kompilator wiedział jak szybko będzie program potem wykonywany. Specjalnie powiedziałem żebyś ustawił tak w programie żeby nie trzeba było grzebać nic w ustawieniach fusebitów. Stara wersja tego procka 90S2313 miała kwarc do 10MHz i nie miała wewnętrznego oscylatora, ustawienia fusebitów nie były tam też tak rozwinięte.

W każdym bądź razie wszystko co masz zrobic to włożyć fabryczny procek do programatora i wgrac program. Na początku programu ma być $crystal = 1000000 żeby to co kompilator widzi było zgodne z rzeczywistością. Kwarc do działania nie jest potrzebny dla fabrycznego procka w którym nic nie było zmieniane w konfiguracji sprzętowej

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

napisales w momencie kiedy

napisales w momencie kiedy pisalem. w poscie nad toba wszystko opisalem.

Portret użytkownika mirley

Re: Diody

Dobrze że z programatorem sprawa się rozwiązała... teraz kwestia schematu twojego urządzenia. Najlepiej narysuj dokładny schemat tego co zrobiłeś.... Czy do każdej diody dałeś rezystor ograniczający prąd? Od każdego pinu powinien iść rezystor np 330R do katody diody a jej anoda do +5V. Wrzuć też program z twoimi modyfikacjami odnośnie zapalania diod. Próbowałeś najpierw robić na 4 diodach, czy od razu na wszystkich?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

ok, dziala. ogromne dzieki za

ok, dziala. ogromne dzieki za pomoc!!!!!!
jesli chodzi o swiecenie diod to podejrzewam ze to wina rezystorow, bo koles w sklepie dal mi 100k mimo ze mowilem o jakie polaczenie diod mi chodzi.

tutaj jest podlaczenie jednego kanalu

sa po 2 diody na jedna strone.

Portret użytkownika mirley

Re: Rezystory

Jakie masz te rezystory.... pamiętaj żeby nie przeciążyć portu w procku, więc rezystory jak będą po 360R-470R lub więcej to powinno być ok.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

no rezystory sa 100k

no rezystory sa 100k

Portret użytkownika mirley

Re: Rezystory

Rezystory z diodami napewno nie są 100k, może 100R, gdyby działało na 100k to znaczy że ograniczyleś prąd diody do około 50uA.... chciałbym mieć taka diodę. Zmierz miernikiem rezystancję

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MULTIMEN

sekwencja

Witaj Mirek przylacze sie :) a jezlei musze miec sekwecje przelaczania diod zalozmy 4 linijek na 4 portach to co trzeba dopisac do tego kawalka kodu co podales u gory zeby po dosciu do 4 linijki sekwencja sie odwrocila i szla w gore na 3, 2 ,1 a po dojsciu do pierwszej znowu w dol na 2, 3 ,4 i tak w kolko :) chodzi o zrobienie efektu rozczezajacego i kurczacego sie okregu :) tyle ze na baterie , i to zeby dzialalo conajmniej 10 godz.

-

MULTI

Portret użytkownika mirley

Re: Okręgi led

Pisz pod swoim wątkiem... wkleiłem tam kod

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

Mam jeszcze pytanko. W jaki

Mam jeszcze pytanko. W jaki sposób (jak zmienić kod) aby za pomocą włącznika na jednym z portów zmieniać zapisany na procku program? Z góry dzieki za odpowiedz.

Portret użytkownika kretman4

Kod

Ze zrodel internetowych zlozylem taki kod. Chodzi mi o to zeby na pinie PD6 zrobic tact switch ktorym bede zmienial programy, w tym przypadku predkosc swiecenia tych diod.
Nie wiem czy to jest poprawne, wydaje mi sie ze nie. Prosze o pomoc.

$regfile = "attiny2313.dat"
$crystal = 1000000
 
Config Portb = &B11111111
       Portb = &B11111111
Config Portd = &B0111111
       Portd = &B1111111
 
'Config Timer0 = Timer , Prescale = 8
'Enable Timer0 : On Timer0 Prztimer0
'Enable Interrupts
 
Dim Leds As Word
Dim Licznik As Byte
Dim X As Word
 
Leds = &B1111111111111                                      ' stan początkowy, 1 oznacza diodę zgaszoną, 0 oznacza włączoną
 
 
Do
 Select Case Licznik
 
   Case 0 : Leds = &B0000000000000
   Case 1 : Leds = &B0000000000000
   Case 2 : Leds = &B0000000000000
   Case 3 : Leds = &B0000000000000
   Case 4 : Leds = &B1111111111111
   Case 5 : Leds = &B0111111111111
   Case 6 : Leds = &B1011111111111
   Case 7 : Leds = &B1101111111111
   Case 8 : Leds = &B1110111111111
   Case 9 : Leds = &B1111011111111
  Case 10 : Leds = &B1111101111111
  Case 11 : Leds = &B1111110111111
  Case 12 : Leds = &B1111111011111
  Case 13 : Leds = &B1111111101111
  Case 14 : Leds = &B1111111110111
  Case 15 : Leds = &B1111111111011
  Case 16 : Leds = &B1111111111101
  Case 17 : Leds = &B1111111111110
  Case 18 : Leds = &B1111111111101
  Case 19 : Leds = &B1111111111011
  Case 20 : Leds = &B1111111110111
  Case 21 : Leds = &B1111111101111
  Case 22 : Leds = &B1111111011111
  Case 23 : Leds = &B1111110111111
  Case 24 : Leds = &B1111101111111
  Case 25 : Leds = &B1111011111111
  Case 26 : Leds = &B1110111111111
  Case 27 : Leds = &B1101111111111
  Case 28 : Leds = &B1011111111111
 
 
 
 End Select
 
 Incr Licznik
 If Licznik = 28 Then Licznik = 5
 Waitms 100
 If Pind.6 = 1 Then Waitms 100
 If Pind.6 = 1 Then Waitms 90
 If Pind.6 = 1 Then Waitms 80
 If Pind.6 = 1 Then Waitms 70
 If Pind.6 = 1 Then Waitms 60
 
 
 X = Leds Mod 256
 Portb = X
 X = Leds / 256
 Portd = X
 
Loop
End

Portret użytkownika mirley

Re: Program LED

Zmieniać programu (pamięci flash) to się za pomocą przycisku nie da ale da się go tak zapisać aby obsługiwał różne drogi w programie w zależności od przycisku

-------------

Napisanie tego kodu:

Waitms 100
 If Pind.6 = 1 Then Waitms 100
 If Pind.6 = 1 Then Waitms 90
 If Pind.6 = 1 Then Waitms 80
 If Pind.6 = 1 Then Waitms 70
 If Pind.6 = 1 Then Waitms 60

ie jest tym o co ci chodzi bo będziesz miał dwa stany: opóxnienie 100ms i jak przycisk będzie trzymany to dodatkow sumę opóźnień (100+90+80+70_60ms)

Trzeba zrobic zmienną typu byte o nazwie np "opu":

Dim Opu as byte

potem przypisac jej wartość początkową np 100 i zamiast waitms 100ms dac waitms opu

teraz przycisk zaraz po poleceniu waitms opu:

If Pind.6 = 1 Then 
  opu = opu +10
  if opu > 200 then opu = 50
end if

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

srednio wiem co z tym zrobic.

srednio wiem co z tym zrobic. chodzi mi o to ze na PD6 chce tact switch'a, jak go wcisne to ma sie zmienic predkosc z np "100" na "90" czyli szybciej, i za kazdym kolejnym wcisnieciem coraz szybciej, a ostatnie wcisniecie powrociloby do poczatku czyli do "100"

Portret użytkownika mirley

Re: LED

Spróbuj tak:

$regfile = "attiny2313.dat"
$crystal = 1000000
 
Config Portb = &B11111111
       Portb = &B11111111
Config Portd = &B0111111
       Portd = &B1111111
 
Dim Leds As Word
Dim Licznik As Byte
Dim X As Word
Dim Opu as byte
 
Leds = &B1111111111111                                      ' stan początkowy, 1 oznacza diodę zgaszoną, 0 oznacza włączoną
 
Opu = 100
 
Do
 Select Case Licznik
 
   Case 0 : Leds = &B0000000000000
   Case 1 : Leds = &B0000000000000
   Case 2 : Leds = &B0000000000000
   Case 3 : Leds = &B0000000000000
   Case 4 : Leds = &B1111111111111
   Case 5 : Leds = &B0111111111111
   Case 6 : Leds = &B1011111111111
   Case 7 : Leds = &B1101111111111
   Case 8 : Leds = &B1110111111111
   Case 9 : Leds = &B1111011111111
  Case 10 : Leds = &B1111101111111
  Case 11 : Leds = &B1111110111111
  Case 12 : Leds = &B1111111011111
  Case 13 : Leds = &B1111111101111
  Case 14 : Leds = &B1111111110111
  Case 15 : Leds = &B1111111111011
  Case 16 : Leds = &B1111111111101
  Case 17 : Leds = &B1111111111110
  Case 18 : Leds = &B1111111111101
  Case 19 : Leds = &B1111111111011
  Case 20 : Leds = &B1111111110111
  Case 21 : Leds = &B1111111101111
  Case 22 : Leds = &B1111111011111
  Case 23 : Leds = &B1111110111111
  Case 24 : Leds = &B1111101111111
  Case 25 : Leds = &B1111011111111
  Case 26 : Leds = &B1110111111111
  Case 27 : Leds = &B1101111111111
  Case 28 : Leds = &B1011111111111
 
 
 
 End Select
 
 Incr Licznik
 If Licznik = 28 Then Licznik = 5
 Waitms Opu
 
 If Pind.6 = 0 Then   'lepiej dać zwieranie do masy niz do zasilania więc 0.
  opu = opu -10
  if opu < 30 then opu = 100
  waitms 100
end if
 
 
 X = Leds Mod 256
 Portb = X
 X = Leds / 256
 Portd = X
 
Loop
End

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

kurde mam problem. zrobilem

kurde mam problem. zrobilem tak jak do tej pory to bylo opisane. ustawilem $crystal = 1000000 w poprzednim ukladzie nie mialem zewnetrznego kwarcu, teraz mam, i problem jest w tym ze ten program sie przycina. nie wiem o co chodzi;/

Portret użytkownika mirley

Re: Led

Co to znaczy że się zacina? chodzi nieregularnie czy zatrzymuje się i nic? Ustawione są fusebity na kwarc i odpowiednio crystal=xxxxxxx ?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

fusebitow nie zmienialem bo

fusebitow nie zmienialem bo powiedziales ze nie musze. crystal jest ustawiony tak jak podalem wyzej. zacina sie czyli chodzi nie regularnie.

Portret użytkownika mirley

Re: LED

Na początek usuń ten fragment programu i zobacz czy zacinanie zniknie:

 If Pind.6 = 0 Then   'lepiej dać zwieranie do masy niz do zasilania więc 0.
  opu = opu -10
  if opu < 30 then opu = 100
  waitms 100
end if

Fusów nie trzeba zmieniać jak pracujesz na wewnętrznym oscylatorze 1MHz, jeśli podłączyłeś kwarc zewnętrzny to on nie będzie działał dopóki nie przestawisz fusebitów

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

no jesli robie poprostu

no jesli robie poprostu program ktory leci caly czas tak samo (bez opcji zmieniania predkosci) czyli np. taki ktory byl na samym poczatku tego postu. to wszystko chodzi pieknie i nic sie nie przycina. a jak wgralem program z opcja zmiany tempa to glupieje przynia sie i nie wiem o co chodzi. raczej to nie jest wina procka bo na 2 mialem to samo.

Portret użytkownika mirley

Re: LED

Wygląda na to że program wchodzi do obsługi przycisku w różnych momentach a nie tylko wtedy kiedy zostanie wciśnięty przycisk. Sprawdź czy tak się dzieje wstawiając znaczne opóźnienie w obsłudze przycisku np:

If Pind.6 = 0 Then   'lepiej dać zwieranie do masy niz do zasilania więc 0.
  opu = opu -10
  if opu < 30 then opu = 100
  wait 2
end if

Spróbuj jeszcze zamaskować pin 6 portu D, w miejscau gdzie jest " Portd = X" napisz "Portd = X or &B11000000"

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

ok. sproboje, dzeki. mam

ok. sproboje, dzeki. mam nadzieje ze to pomoze jakos

Portret użytkownika kretman4

Mam na zbyciu at89s52 i

Mam na zbyciu at89s52 i chcialbym go wykorzystac. Ale niebardzo wiem w jaki sposob zaprogramowac wejscia/wyjscia, bo przegladalem datasheet i tam troche tego jest. Pewnie ktos juz go programowal, wiec bylbym wdzieczny za jakas mala podpowiedz:)

wesolych ^^

Portret użytkownika mirley

Re; AT89S52

ten mikrokontroler nie ma konfiguracji wejścia wyjścia bo to 8051. Jeśli ci chodzi o program a nie o konfigurację to może być bascom 8051 lub C

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

chodzi mi o to zeby wgrac

chodzi mi o to zeby wgrac napisany przez Ciebie wczesniej program, tak jak w attiny2313.

Portret użytkownika mirley

Re; AT89S52

Mam opis na stronie w artykułach różnych na temat tego procka..... ale programu z tiny2313 ani z żadnego avr'a i tak nie wgrasz do at89S....

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika kretman4

dziwny problem

nie wiem o co chodzi... Najpierw walczyłem z połączeniem się ATtiny2313 z kompem (bo mam nowego z windows 7), nie udało mi się w żaden sposób przez Bascom'a, Coś tam niby się udało przez program Dybkowskiego... w końcu się wkurzyłem i odpaliłem starego kompa na którym zainstalowałem XP. Odpaliłem UserPort, wrzuciłem kod do Bascom'a, bez problemu połączyłem się z prockiem, żadnych błędów nie było, sam dobrał układ, ale... w momencie kiedy wgrywa się program, palą się diody podłączone do programowanego urządzenia, a jak już jest wszystko wgrane to jest cisza... (wcześniej chodziło na zasilaniu z USB chociażby) więc odłączyłem układ od kompa i podłączyłem pod zasilanie bezpośrednie 5V.. i też cisza. Padł procek czy o co chodzi? Może to być wina kodu?

posiedziałem nad tym trochę i... jak podłączę do zasilania, np zasilacz, to po chyba 10 sekundach włącza się kilka diod, świecą się cały czas po następnych kilku sekundach do tych świecących dochodzą ze 2 mrugające (niby zgodnie z programem) i następuje zwiecha, tak jakby sie resetował i układ zaczyna chodzić normalnie... nic z tego nie rozumiem.

Portret użytkownika mirley

Re: Tiny2313

A fusebity są ustawione? czy taktowanie zgadza się z tym co zostało zadeklarowane w programie instrukcją crystal?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

fusebitów w ogóle nie

fusebitów w ogóle nie ruszałem za każdym razem kiedy programowałem ATtiny i zawsze wszystko chodziło, a teraz nie chce. nie mam podłączonego kwarcu z kondensatorami na pinach 4 i 5 bo to podobno jest zbędne jeśli się używa wewnętrznego rezonatora. Taktowanie w programie ustawione tak jak w kodzie.

Portret użytkownika mirley

Re: Tiny2313

Patrze jeszcze raz na program i nie widzę błędu... co do kwarca to tak jak mówisz jest zbedny gdy używasz rezonatora wewnętrznego. Jeśli tiny jest nowy a fusebitów nie ruszałeś to zadeklarowana czestotliwość w programie zgadza się z tą która faktycznie jest. Spróbuj napisac prosty program który ma tylko w do loop miganie diodą czyli jden wait 1 i toggle port na którym jest dioda

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

wlasnie mam maly problem bo

wlasnie mam maly problem bo jesli jest kolejnosc w CASE i mam "Leds = &B0000000000000" to nie wiem w ktorym miejscu jest dany port. czy od lewej jest portb 0 czy jak.

postaram sie poszukac jakiegos programu prostego w wgrać w procka. sciagnalem "XP mode" na &ke, zobacze, może uda mi się coś zdziałać ;/

Portret użytkownika mirley

Re: Leds

Leds to tylko zmienna bity w kolejności naturalnej 15,14,13.....2,1,0. Zależy jak zmienna jest przypisana do portu... w tym przypadku:

X = Leds Mod 256
 Portb = X
 X = Leds / 256
 Portd = X

co odpowiada led7....led0 jest portemb7...0, starsze kolejne bity to portd.... z tym że portd.0 to led.8 itd

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

rozgryzlem kolejnosc w

rozgryzlem kolejnosc w poleceniu Case wzgledem pinów. ale pojawił się dziwny problem. Tamten układ na SMD coś trafiło bo nowy bez problemu zaprogramowałem, ale...
wkladam uklad do urzadzenia, jest zaprogramowana pewna sekwencja na wszystkich portach B i portach D 0,1 i 2. Po podłączeniu zasilania nie palą się ostatnie 2 segmenty diod (czyli port D1 i D2). Jeśli kilka razy wylacze i wlacze zasilanie to zapalaja sie normalnei wsyzstkie diody i chodzi jak nalezy, Odlacze zasilanie, urzadzenie polezy jakis czas niepodlaczone i znow chce wlaczyc to ta sama historia, nie pala sie 2 ostatnie, a po kilku razach wlacz/wylacz dziala normalnie. Nie jest do wina diod bo diody dzialaja bez problemy odrazu, nie wiem czy ukladu, bo kupilem dwa, zaprogramowalem tak samo i jeden i drugi takie hece robi. Nie wiem czy wina w kodzie czy nie, dla pewnosci go wrzuce. Nie stosowalem kwarcu, fusebitow nie ruszalem. Jesli to istotne to przez Bascoma ni cholery nie moge juz nic wgrac, na STK200 (tam gdzie wtedy to byla jedyna dzialajaca opcja) teraz wywala blad "ID: F...", wiec tak jak to niby powinno byc odpalilem na "sample elect" i w tym przypadku wywala "ID: 0...". wiec wgralem ISPProgrammer i PonyProg 2000 no i bez problemu moge wgrywac.
Kod ktory wgrywam:

$regfile = "attiny2313.dat"
$crystal = 1000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
'Config Timer0 = Timer , Prescale = 8
'Enable Timer0 : On Timer0 Prztimer0
'Enable Interrupts
 
Dim Leds As Word
Dim Licznik As Byte
Dim X As Word
 
Leds = &B0000000000000000
 
Do
 Select Case Licznik
   Case 0 : Leds = &B0000000000000000
   Case 1 : Leds = &B0000000000000000
   Case 2 : Leds = &B0000000000000000
   Case 3 : Leds = &B0000000000000000
   Case 4 : Leds = &B0000000000000000
   Case 5 : Leds = &B0000000000000000
   Case 6 : Leds = &B0000000000000000
   Case 7 : Leds = &B0000001111111111
   Case 8 : Leds = &B0000001111111111
   Case 9 : Leds = &B0000001111111111
  Case 10 : Leds = &B0000001111111111
  Case 11 : Leds = &B0000001111111111
  Case 12 : Leds = &B0000000111111111
  Case 13 : Leds = &B0000001011111111
  Case 14 : Leds = &B0000001101111111
  Case 15 : Leds = &B0000001110111111
  Case 16 : Leds = &B0000001111011111
  Case 17 : Leds = &B0000001111101111
  Case 18 : Leds = &B0000001111110111
  Case 19 : Leds = &B0000001111111011
  Case 20 : Leds = &B0000001111111101
  Case 21 : Leds = &B0000001111111110
  Case 22 : Leds = &B0000001111111101
  Case 23 : Leds = &B0000001111111011
  Case 24 : Leds = &B0000001111110111
  Case 25 : Leds = &B0000001111101111
  Case 26 : Leds = &B0000001111011111
  Case 27 : Leds = &B0000001110111111
  Case 28 : Leds = &B0000001101111111
  Case 29 : Leds = &B0000001011111111
 
 End Select
 
 Incr Licznik
 If Licznik = 30 Then Licznik = 12
 
 Waitms 110
 
 X = Leds Mod 256
 Portb = X
 X = Leds / 256
 Portd = X
 
Loop
End

Portret użytkownika mirley

Re: Programowanie LED

Dopisz sobie jeszcze na początku przed do loop ustawianie licznika: Licznik = 12. Nie rozumiem tez czemu tak dałeś i po co ci stany od 0 do 12 które tylko raz się wykonują przy starcie.

Możliwość programowania nie może zależeć od programu.... jeśli masz połączenie z prockiem zrobione i ponyprog go widzi to bascom też musi, takie cos mi sie nigdy nie działo. A program przechodzi poprawną weryfikację, to co odczytujesz z procka zgadza się z tym co wpisujesz?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.