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



Teraz jest 29 mar 2024, o 12:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 20 cze 2020, o 20:39 
Offline
Nowy

Dołączył(a): 16 cze 2020
Posty: 5
Pomógł: 0

witam
ostatnio staram się zacząć trochę działać z AVRami
na początek zrobiłem sobie na płytce stykowej wyjścia z portów D na diody LED

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


Cytuj:
#define F_CPU 1000000L <---- tego się NIGDY nie robi w kodzie tylko w ustawieniach projektu [mirekk36]


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


jest to program zrobiony na bazie jednego z poradników/kursów z internetu, z tą różnicą, że tam były wklepane delay 1000 ms.

Mój problem polega na tym, że przy taktowaniu mikroprocesora 1MHz, _delay_ms powinien iść max do ~264ms, a gdy w moim programie zwiększam go chociażby do 20ms, diody zamiast migać na przemian (0101 0101 -> 1010 1010), robią jakby w kółko tylko pierwszą część programu (1010 1010 -> 0000 0000), czyli mrygają tylko 4 z 8.
Próbowałem zrobić to na pętli for, w ten sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jednak efekt jest dokładnie taki sam, jak przy zwiększeniu delay z 10 do 20 ms, czyli mrygają tylko 4 diody.
uS to Atmega 8a, bo taką miałem z jakiegoś projektu, który robiłem 1.5 roku temu.

Czy coś przeoczyłem może?
bo szukając na internecie, to właśnie zazwyczaj natykam się na to, że ktoś proponował to zrobić właśnie na pętli for, co u mnie nie zadziałało, albo jakieś inne bardziej 'kosmiczne' rozwiązania, w które narazie na początek wolę się nie wgłębiać, póki nie dowiem się, co tutaj robię nie tak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2020, o 21:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

Ustawiłeś sobie DELAY-a na 10ms - to jest "jedna setna sekundy i ty chcesz zauważyć jaką kolwiek zmianę? To nie możliwe. Chyba że jesteś robotem.
Ponieważ się uczysz, to zmień tego "_delay_ms(10)" na "_delay_ms(500)" i napisz co zauważyłeś.
Pozdrawiam.

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2020, o 21:27 
Offline
Nowy

Dołączył(a): 16 cze 2020
Posty: 5
Pomógł: 0

no to właśnie pisałem o tym, że jak zwiększę chociażby do 20ms, to działa mi tylko pierwsza połowa kodu, czyli mrygają tylko 4 diody, a reszta nie, a przy 500, 1000 czy ile bym nie wpisał jest dokładnie to samo
10 jest to jedyna wartość, przy której wogóle pozostałe 4 diody wstają do życia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2020, o 21:48 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 390
Lokalizacja: Głogów
Pomógł: 11

A czy w drugiej pętli for nie powinieneś użyć innej zmiennej niż i? Nie wiem dla czego w jednej i drugiej operujesz na tej samej zmiennej. Wpisz w drugiej pętli zamiast i np j.
Możesz zdefiniować zmienną już w pętli np :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
,
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Kolejna rzecz to zamiast int zastosuj uint8_t - możesz operować na liczbach do 255 choć oczywiście nie zmienia to efektu działania programu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2020, o 21:52 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

A nie masz czasem włączonego CKDIV8?

Przy okazji, usuń z kodu F_CPU - to się ustawia we właściwościach projektu.

Wysłane ze srajfona

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2020, o 22:43 
Offline
Użytkownik

Dołączył(a): 07 lut 2015
Posty: 156
Pomógł: 2

Nie napisałeś w sumie co ile mają te biedne diody migać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2020, o 23:01 
Offline
Nowy

Dołączył(a): 16 cze 2020
Posty: 5
Pomógł: 0

po zmianie drugiej zmiennej na j oraz zdefiniowaniu zmiennej jako uint8_t, efekt ten sam, czyli działają tylko 4 diody(1010 1010)
a atmega 8 wogóle posiada fus ckdiv8?

a diody miały migać powiedzmy co sekundę, czy tam jakąkolwiek ilość czasu, bo narazie wszystko powyżej 10ms, co jak kolega wyżej zauważył jest nie do wychwycenia okiem powoduje, że program nie działa



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2020, o 23:31 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

MrKovski napisał(a):
a atmega 8 wogóle posiada fus ckdiv8?

Rzeczywiście, nie posiada, sorry za wprowadzenie w błąd.

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 06:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Arek1111111111 napisał(a):
A czy w drugiej pętli for nie powinieneś użyć innej zmiennej niż i? Nie wiem dla czego w jednej i drugiej operujesz na tej samej zmiennej.


Możesz rozwinąć swoje obawy i sens takiego działania?

@MrKovski, pokaż schemat jak to podłączyłeś i może jakąś fotkę jeśli to jest na stykówce

------------------------ [ Dodano po: 6 minutach ]

Cytuj:
Mój problem polega na tym, że przy taktowaniu mikroprocesora 1MHz, _delay_ms powinien iść max do ~264ms, a gdy w moim programie zwiększam go chociażby do 20ms, diody zamiast migać na przemian (0101 0101 -> 1010 1010), robią jakby w kółko tylko pierwszą część programu (1010 1010 -> 0000 0000), czyli mrygają tylko 4 z 8.

Skąd to 264ms??
Czy zmieniasz wartość tylko jednego delaya czy obu jednocześnie?

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 08:41 
Offline
Nowy

Dołączył(a): 16 cze 2020
Posty: 5
Pomógł: 0

Robiłem według tego schematu:
http://hobby.abxyz.bplaced.net/img/art002_schemat2.png

Zdjęcia:
Obrazek

Jedynie kondensatory filtrujące dałem 47nF, bo nie miałem 100

Po wejściu w util/delay.h:

Cytuj:
The maximal possible delay is 262.14 ms / F_CPU in MHz
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 09:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Nie wiem czy w pętli for ma to jakieś znaczenie, bo ja zawsze robię tam inkrementację x++, a nie ++x i może właśnie tu jest problem...

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 10:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2019
Posty: 147
Pomógł: 37

Opisane objawy wskazują, że prawdopodbnie masz włączonego watchdoga. Pokaż fuse bity.


Autor postu otrzymał pochwałę

_________________
Think for yourself and question authority.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 10:43 
Offline
Moderator
Avatar użytkownika

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

pierwsza podstawowa kaszana po różnego tego typu kocich internetowych kursach to ta linia w kodzie

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


co też wyraźnie oznaczyłem w pierwszym wątku, tego się NIGDY nie robi - ustawia się to we właściwościach projektu albo jak już ktoś ręcznie rzeźbi to w makefile

------------------------ [ Dodano po: 3 minutach ]

SylwekK napisał(a):
bo ja zawsze robię tam inkrementację x++, a nie ++x i może właśnie tu jest problem...

nie to nie problem

_________________
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: 21 cze 2020, o 10:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

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


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


Sprawdż w MkAvrCalculatorze jak masz ustawione fusebity.
Wyrzuć z twojego linijkę definiującą taktowanie i ustaw taktowanie w projekcie.
Obie wersje działają na 100%.

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 10:50 
Offline
Moderator
Avatar użytkownika

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

kolejny babol to może być z połączeniami na stykówce - szczególnie jak chodzi o szyny zasilania na ich środku - o czym każdy początkujący zawsze zapomina albo nie wie po prostu


dlatego warto oglądać poradniki - szczególnie TEN od tego konkretnego miejsca:

https://youtu.be/LiQcVSPkT6M?t=1047

_________________
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: 21 cze 2020, o 10:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

Tu masz video z poprawionego projektu.
Wersja1:

Wersja2:

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 13:39 
Offline
Moderator
Avatar użytkownika

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

mario2015 napisał(a):
Tu masz video z poprawionego projektu.

Musisz oznaczyć filmy jako publiczne, bo teraz tylko ty je widzisz a dla innych są niedostępne

_________________
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: 21 cze 2020, o 13:47 
Offline
Nowy

Dołączył(a): 16 cze 2020
Posty: 5
Pomógł: 0

Panie Mirku, oglądałem Pana poradnik, właśnie starałem się robić wszystko tak samo, sprawdzałem i u mnie linie zasilania na całej długości są połączone ze sobą, niestety nie dotarłem do momentu w którym mówił Pan o stosowaniu "define F_CPU 1000000L"

w każdym razie kolega fofex miał rację, po wyłączeniu watchdoga, wszystko zagrało jak należy!

będę musiał się wgłębić jeszcze co to wszystko robi :)
bardzo dziękuję za pomoc!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2020, o 14:08 
Offline
Moderator
Avatar użytkownika

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

MrKovski napisał(a):
będę musiał się wgłębić jeszcze co to wszystko robi

dlatego polecam Bluebooka

https://atnel.pl/mikrokontrolery-avr-jezyk-c.html

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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