Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 lip 2026, o 17:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 52 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 30 sty 2014, o 18:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Witajcie,
ostatnio bawię się trochę diodą LED RGB większej mocy itd. Poradziłem sobie z uruchomieniem jej na ATmedze 32 i timerach sprzętowych. Teraz probuję to zrobić na ATmedze 8 i timerach programowych ale nic z tego nie wychodzi. Nie wiem dlaczego ... Moj sprzęt to [ATmega8 -taktowanie wewnętrzne 8MHz + drivery LED]. Zamieszczam poniżej kod + schemat ideowy. Z góry dzięki za wytłumaczenie i pomoc.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obrazek



Ostatnio edytowano 30 sty 2014, o 20:26 przez zlata_n, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 18:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Kolego nie obraź się ale ze stwierdzenia
"nic z tego nie wychodzi" nie wiele można wywnioskować no i pomóc

Schemacik by się przydał ewentualnie zdjęcie płytki
bardziej szczegółowy opis problemu itd. itp.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 20:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Przepraszam koledzy ;), schemat już dorzuciłem. Myślałem, że na pierwszy rzut oka będzie widać jakiegoś babola w kodzie.
1) kod jest w 99% z bluebooka
2) wgrywam kod i lampka świeci, lecz nie działają timery programowe.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 20:35 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27463
Lokalizacja: Szczecin
Pomógł: 1045

zlata_n napisał(a):
Myślałem, że na pierwszy rzut oka będzie widać jakiegoś babola w kodzie


To jest najczęstszy błąd - brak umiejętnego zadawania pytań. Najlepiej wrzucić 5 kilo kodu i zapytać - "co to nie działa?" :( Panowie - tak nie można....

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 21:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Spróbuj tak:
w pętli for jednej i drugiej dodaj opóźnienie (jakiś tam delay_ms dla testu)
i jakaś diodka do debugowania by się przydała :) np. w przerwaniu czy Ci działa tak jak tego
oczekujesz,
może coś zobaczysz od czego można by zacząć sprawdzanie programu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 22:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Dodałem do pętli for opóźnienie ale nic to nie dało. Diodę w przerwaniu też dodałem i nic...
Kod jest prosty i czytelny... rozumiem jak on działa ... jednak nie wiem dlaczego nie chcą pracować te timery programowe.
Jakieś pomysły panowie ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 22:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Piszesz "diodę dodałem i nic"
ale co nie świeci , świeci
w jakim miejscu dodałeś w którym warunku , czy przed warunkiem
opowiadaj chłopie - jak inaczej można pomóc jak Ty
piszesz tak mało informacji że (jak to bodajże Sun) mówi szklanych kul zabrakło :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 23:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

1) dodałem opoznienie do dwóch pętli w while (rozjasnianie i sciemnianie) i nic

2) wyłączyłem na początku diody
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i w przerwaniu włączyłem diode
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 23:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
zmień wektor:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

na
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 23:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Wektor `COMPA` tyczy się Timera 16bitowego, nie mogę tego tutaj zmienić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 23:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

No widzisz to żeśmy się nie zrozumieli o debugowaniu diodą

chodzi oto abyś dodał na innym pinie uC jakąś małą diodę led która będzie debugerem
gdy wstawisz kod migający nią
np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w przerwaniu lub gdzieś w pętli głównej ,
będziesz miał pewność że ta część (lub całość ) przerwania Ci chodzi poprawnie
zgodnie z tym co założyłeś a tak to nie wiadomo co szwankuje



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 23:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Zmieniłem troszkę twój kod i mi działa na atmega32
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W twojej wersji w pętlach for nie masz żadnego opóźnienia więc te pętle działają bardzo szybko. Pierwsza pętla "z szybkością światła" rozjaśnia diodę. Dioda świeci. Pół minuty przerwy. Potem bardzo szybkie ściemnianie i znów bardzo szybkie rozjaśnianie.

Co w rezultacie daję ciągłe świecenie diod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 01:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

zlata_n napisał(a):
Wektor `COMPA` tyczy się Timera 16bitowego, nie mogę tego tutaj zmienić.

..sory - patrzyłem, myślałem, patrzyłem ..... no i mosz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 16:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Zaba napisał(a):
chodzi oto abyś dodał na innym pinie uC jakąś małą diodę led która będzie debugerem
gdy wstawisz kod migający nią


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zrobiłem teraz taki test z diodą i też jest problem. Dioda się ciągle świeci a powinna mrugać.

Jak usunę kompletnie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


wtedy dopiero dioda zaczyna mrugać co 1sek. Ewidentnie widać, że błąd leży w inicjalizacji Timera ... i tam się gdzieś zatrzymuje i w ogóle nie chce wejść do pętli while().



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 17:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

A czy w tym twoim testowym programie miałeś funkcję obsługi przerwania, chociaż by pustą?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 19:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

kolega @jacekk232
ma rację jeśli nie dasz obsługi przerwania
to uC będzie Ci się ciągle resetował



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 19:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Właśnie dziwne jest to że miałem w kodzie testowym za mainem procedure przerwania. Poniżej dokładnie kod, którym testuje urządzenie ... i nic zapala się dioda i program stoi ....

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


jednak gdy tylko zakomentuje:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to program działa poprawnie (mruga dioda co 1 sek). O co tu chodzi?!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 19:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

No kur...ka ten tego nie wiem (to do samego siebie :))

ten program jest mało skomplikowany i nawet jakby
timer był źle skonfigurowany to "dioda debuger" powinna mrugać
w pętli głównej. (chyba żeby było inaczej :))

Po kolei sprawdź proszę wszystko

1. Ustawienia projektu (uC , zegar)
2. Zapis projektu na dysk
3. Clean i Build (tylko upewnij się ,że masz zaznaczony odpowiedni projekt)
4. Wgraj do procka program

Jak to nie ruszy to niestety poddaję się :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 19:52 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

No a jak ma się nie zapalać?
zmienne pwm są globalne więc są inicjowane na 0

a w przerwaniu masz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Więc te warunki masz zawsze spełnione i dioda co robi? no zapala się świeci!
Nie sprawdzałem jak często wywołuje Ci się przerwanie, ale...

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 19:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Ale kolega autor pisze że jak nie zakomentuje
sei()
to nie wchodzi do
while()

------------------------ [ Dodano po: 2 minutach ]

przedtem miał przypisane wartości do pwm1 .. pwm3



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 19:58 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Zaba napisał(a):
Ale kolega autor pisze że jak nie zakomentuje
sei()
to nie wchodzi do
while()

Napisał ostatnio:
Cytuj:
jednak gdy tylko zakomentuje:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to program działa poprawnie (mruga dioda co 1 sek). O co tu chodzi?!

No to w końcu jak jest? ;-)

------------------------ [ Dodano po: 1 minucie ]

Tzn. nie czytałem całego wątku a tylko ostatni post z kodem który miga gdy przerwania są wyłączone
i radośnie świeci gdy przerwania są włączone.
Z czego wyciągnął błędny wniosek że pętla się nie wykonuje

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Podłącz diodę, której stan zmieniasz w pętli głównej do innego pinu np. PB0 albo zakomentuj ciało funkcji obsługi przerwania (zostaw ja pustą) i musi działać.
zaba napisał(a):
Ale kolega autor pisze że jak nie zakomentuje
sei()
to nie wchodzi do
while()


Przetestowałem ten program i okazuje się, że while się wykonuje tylko, że w przerwaniu ta dioda jest wciąż zapalana.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

kurczątko nie zauważyłem że "debuger"
wisi na tym samym pinie co dioda rgb :(

------------------------ [ Dodano po: 1 minucie ]

Autor chyba zniknął i piszemy ze sobą :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

jestem, jestem i testuje ten program i juz powoli trace cierpliwość, bo poprostu nie wiem gdzie leży błąd ...

Panowie problem leży też w testowaniu, jest to juz gotowa płytka polutowana z procesorem ATmega8 w wersji SMD wiec nie moge zbynio już nic dołączyć/zmienić. Program wcześniej był uruchamiany z ATmedze16 i nie było żadnych problemów. Korzystałem z 4 (sprzętowych timerów), 3 na każdy kolor PWM + 1 na timer systemowy. Program działał, lampka świeciła. Postanowiłem zrobić PCB i chciałem użyć procka w małej obudowie. Padło na ATmege8 ze względu, że program nie zajmujował sporo miejsca. Okazało się jednak, że ATmega8 posiada tylko 3 timery sprzętowe, więc nie mogę zorganiwoać programu tak samo jak w przypadku ATmegi16 bo brakuje mi jednego Timera systemowego na potrzeby funkcji mieszającej. Stwierdziłem więc, że podejdę do problemu od drugiej strony i sterowanie PWM zorganizuję programowo i dodatkowo wykorzystam 1 z 3 sprzętowych timerow na potrzeby timera systemowego. Mam nadzieje, że nie zakręciłem za bardzo. Proszę o pomoc i ewentualnie kto może niech sprawdzić na swojej ATmedze 8 w DIPie jak ma pod ręką.



Ostatnio edytowano 2 lut 2014, o 20:25 przez zlata_n, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:16 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

zlata_n napisał(a):
... O co tu chodzi?!...

Ano chodzi o to że przerwania wykonują Ci się z taką częstotliwością że dioda non stop świeci bo jest podłączona do pinu którego stan jest zmieniany w przerwaniu. A jeżeli dobrze policzyłem to licznik tyka co 5ms.
Zresztą wgrałem ten Twój kod do procka i efekt jest taki jak opisujesz. Zmień pin diody która jest "debuggerem".

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Od kilku postów o tym trąbimy dlaczego ta dioda wciąż świeci. Ale kolega autor chyba nie czyta naszych odpowiedzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Marcin_G napisał(a):
A jeżeli dobrze policzyłem to licznik tyka co 5ms.

czyli rozumiem, że musze zmienić szybkość tykania licznika w przerwaniu tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:30 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

zlata_n napisał(a):
Marcin_G napisał(a):
A jeżeli dobrze policzyłem to licznik tyka co 5ms.

czyli rozumiem, że musze zmienić szybkość tykania licznika w przerwaniu tak?

nie, nie o to chodzi.

------------------------ [ Dodano po: kilkunastu sekundach ]

przeczytaj ten mój post
http://forum.atnel.pl/topic5750.html#p68083

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

MirkoT napisał(a):
przeczytaj ten mój post
topic5750.html#p68083

no ale nie rozumiem, co mam zmienić, inicjacje mam wrzucić w inne miejsce? czy inicjować inną wartościa?
Jest to program z bluebooka i `teoretycznie` nie zmieniany powinien działać tak jak to opisuje Mirek w książce. Nie było mowy o problemie z inicjalizacją tych wartości PWM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2014, o 20:36 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

no napisałeś że dioda debur świeci Ci cały czas
Z tego wyciągnąłeś wniosek, że pętla główna Ci się nie wykonuje.
a problemem jest pin do którego podłączyłeś tą diodę ;-)
Wybierz inny pin i zobaczysz, że zacznie radośnie zmieniać stan co 1sek

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 52 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO