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



Teraz jest 20 kwi 2024, o 08:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 10 lis 2017, o 00:40 
Offline
Nowy

Dołączył(a): 08 lis 2017
Posty: 7
Pomógł: 0

ObrazekObrazekObrazek


---ATtiny85---
Brak błędów.

Witam Wszystkich,

jestem całekiem nowy i spotkałem się z problemem. Programator firmy Atnel usbAsp 4.1 widzi i ładnie programuje, ale problem polega na tym , że po podłączeniu diody pod gnd i zaprogramowany pin , dioda miga z jednostajną zęśtotliwością pomimo zmiany kodu. Kod się zmienia , odczytywałem. Po podłączeniu pod GND i Vcc programatora rónież ten sam objaw.

Próbowałem bez F_cpu również.

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



z góry dziękuję za pomoc.
Adam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 02:17 
Offline
Moderator
Avatar użytkownika

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

Pomijam już, że to #define F_CPU w kodzie do masakra ...

ale sam kod ... hmmm a czegóż się po nim spodziewasz , jeśli w pętli głównej programu wstawiłeś "return 0" ?

polecam tobie książkę

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

warto od niej zacząć i pisać takie pierwsze kody z pełnym zrozumieniem - bo już na samym jej początku dotyczącym pierwszych programów na procka wyjaśniam co, jak i gdzie a także od czego zależy - do czego jest "return 0" i dlaczego się z tego nie korzysta w zasadzie w prockach - gdy stosuje się pętlę główną ..... ty zaś mieszasz to jak się tylko da

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

krótko mówiąc wywal ten "return 0" ;) ale dalej kod nie będzie ci działać pewnie zgodnie z oczekiwaniem w pełni więc wywal też z kodu i nigdy nie używaj

#define F_CPU ... chociaż to też tu nie jest problemem i kod dalej nie będzie działać pewnie tak jak chcesz - no ale będzie działać poprawnie ;)

tobie za to łatwiej będzie go dalej rozbudowywać

Za to PODSTAWĘ na miganie diodą LED znajdziesz ZAWSZE tutaj:

http://mirekk36.blogspot.com/2015/07/ec ... ogram.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  
PostNapisane: 10 lis 2017, o 02:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Na początek, któtka analiza tego co napisałeś.
No to po kolei...

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

Tej linijki kodu nigdy nie wpisujemy w kodzie, tylko ustawiamy we właściwościach projektu.

Zerowanie więcej niż jednego bitu lepiej zapisać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Jeszcze przed pętlą główną ustawiasz PB3 i PB4 w rejestrze kierunku jako wyjścia.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Następnie ustawiasz na nich stan niski. Z tego co widzę, masz podłączoną jedną diodę LED jej anodą do Vcc, więc by dioda ta się zaświeciła musisz podać stan niski na jej katodę. Stan wysoki natomiast podajesz na jej katodę, by je wyłączyć. W takim razie na samym początku teoretycznie (bo masz podłączoną tylko jedną diodę do chyba PB3) obie diody zostaną zapalone.
Teraz program wchodzi do pętli głównej while(1) i napotyka na linijkę, która gasi diodę podłączoną do PB3:
PORTB |= (1<<PB3);
Następnie czeka sobie 1000ms.
Po czym gasi drugą diodę podłączoną do PB4.
PORTB |= (1<<PB4);
Znowu czeka 1000ms.
Po czym napotyka na instrukcję return.
Instrukcja return powoduje wyjście, opuszczenie funkcji, więc program ten kończy swoje działanie.

Jeżeli Twoim celem było napisanie programu, który ma zapalić diodę na PB3, po sekundzie zapalić diodę na PB4, przez kolejną sekundę diody te mają się świecić, po czym na sekundę mają zgasnąć i tak w kółko, to program ten mógłby 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.


Widzisz dodałem jeszcze jednego delay'a, bo bez niego dioda PB3 będzie się cały czas świecić.
Będzie tak dlatego, że po wykonaniu tej linijki kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

program przeskoczy do tej na samym początku w pętli while:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie będziesz w stanie zaobserwować jej zgaszenia.
Natomiast dioda podłączona do PB4 będzie zapalała się na 1000ms i gasła na 1000ms.

Osobiście polecam Ci zacząć przede wszystkim od książki:
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html
i od poczytania bloga:
http://mirekk36.blogspot.co.uk/2012/01/avr-porty-wewy-dir-podstawy.html
http://mirekk36.blogspot.co.uk/2015/07/eclipse-start-plus-pierwszy-program.html
http://mirekk36.blogspot.co.uk/2011/11/dlaczego-eclipse-zamiast-avr-studio.html

Powodzenia! ;)

O i Mirek mnie ubiegł! ;)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 08:44 
Offline
Nowy

Dołączył(a): 08 lis 2017
Posty: 7
Pomógł: 0

Panowie,
jesteście szybcy jak błyskawica. Jak tylko usiądę do lektury(książkę zamówię , ale blog zacznę jużdziś) i zweryfikuję moje błędy, będę raportował.

dziękuję za odpowiedzi
Adam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 09:59 
Offline
Nowy

Dołączył(a): 08 lis 2017
Posty: 7
Pomógł: 0

anshar napisał(a):
Na początek, któtka analiza tego co napisałeś.
No to po kolei...

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

Tej linijki kodu nigdy nie wpisujemy w kodzie, tylko ustawiamy we właściwościach projektu.

Zerowanie więcej niż jednego bitu lepiej zapisać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Jeszcze przed pętlą główną ustawiasz PB3 i PB4 w rejestrze kierunku jako wyjścia.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Następnie ustawiasz na nich stan niski. Z tego co widzę, masz podłączoną jedną diodę LED jej anodą do Vcc, więc by dioda ta się zaświeciła musisz podać stan niski na jej katodę. Stan wysoki natomiast podajesz na jej katodę, by je wyłączyć. W takim razie na samym początku teoretycznie (bo masz podłączoną tylko jedną diodę do chyba PB3) obie diody zostaną zapalone.
Teraz program wchodzi do pętli głównej while(1) i napotyka na linijkę, która gasi diodę podłączoną do PB3:
PORTB |= (1<<PB3);
Następnie czeka sobie 1000ms.
Po czym gasi drugą diodę podłączoną do PB4.
PORTB |= (1<<PB4);
Znowu czeka 1000ms.
Po czym napotyka na instrukcję return.
Instrukcja return powoduje wyjście, opuszczenie funkcji, więc program ten kończy swoje działanie.

Jeżeli Twoim celem było napisanie programu, który ma zapalić diodę na PB3, po sekundzie zapalić diodę na PB4, przez kolejną sekundę diody te mają się świecić, po czym na sekundę mają zgasnąć i tak w kółko, to program ten mógłby 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.


Widzisz dodałem jeszcze jednego delay'a, bo bez niego dioda PB3 będzie się cały czas świecić.
Będzie tak dlatego, że po wykonaniu tej linijki kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

program przeskoczy do tej na samym początku w pętli while:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie będziesz w stanie zaobserwować jej zgaszenia.
Natomiast dioda podłączona do PB4 będzie zapalała się na 1000ms i gasła na 1000ms.

Osobiście polecam Ci zacząć przede wszystkim od książki:
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html
i od poczytania bloga:
http://mirekk36.blogspot.co.uk/2012/01/avr-porty-wewy-dir-podstawy.html
http://mirekk36.blogspot.co.uk/2015/07/eclipse-start-plus-pierwszy-program.html
http://mirekk36.blogspot.co.uk/2011/11/dlaczego-eclipse-zamiast-avr-studio.html

Powodzenia! ;)

O i Mirek mnie ubiegł! ;)




Cytuj:
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB |= (1<<PB3);
PORTB |= (1<<PB3);

while (1)
{
PORTB &= ~(1<<PB3); // zapalenie diody podłączonej jej katodą do PB3


}
}


Proszę o wyjaśnienie ostatniego tematu, który nie daje mi spokoju.
Uprościłem kod do minimum moich możliwości. Próbuję zapalić PB3 na stałe.


Katoda diody na PB3 - Anoda diody na Vcc


wynik poniżej :






Proszę o wyjaśnienie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 10:34 
Offline
Użytkownik

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

Film jest niedostępny :-(
Oczywiście diodę podłączyłeś przez rezystor?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 10:51 
Offline
Nowy

Dołączył(a): 08 lis 2017
Posty: 7
Pomógł: 0

MirkoT napisał(a):
Film jest niedostępny :-(
Oczywiście diodę podłączyłeś przez rezystor?


Dioda przez rezystor.


Teraz Film powinien działać.

[youtube]https://youtu.be/usVVs0XTTKc[/youtube]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 10:57 
Offline
Użytkownik

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

A może to jest migająca dioda? Są takowe...
Podłącz ją tylko pod zasilanie (przez rezystor) bez procka.


Autor postu otrzymał pochwałę

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 11:14 
Offline
Nowy

Dołączył(a): 08 lis 2017
Posty: 7
Pomógł: 0

MirkoT napisał(a):
A może to jest migająca dioda? Są takowe...
Podłącz ją tylko pod zasilanie (przez rezystor) bez procka.



Ja piórkuje. No przecież!!! Tak właśnie jest.

Zawiodlem na samym początku, nie te diody,.Co gorsza, nie sprawdziłem co wyciągam z pudła!!!

Dziękuję wszystkim

Bardzo spodobał o mi się forum i programowanie dzięki video Pana Mirka, ale użytkownicy forum sa rownie pomocni .

Temat do zamknięcia

Wszystko się ładnie programuje.



Blad:

Dioda sprawdzająca poprawność programowania niewłaściwa. !!!!migająca!!!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2017, o 14:36 
Offline
Nowy

Dołączył(a): 08 lis 2017
Posty: 7
Pomógł: 0

mirekk36 napisał(a):
Pomijam już, że to #define F_CPU w kodzie do masakra ...

ale sam kod ... hmmm a czegóż się po nim spodziewasz , jeśli w pętli głównej programu wstawiłeś "return 0" ?

polecam tobie książkę

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

warto od niej zacząć i pisać takie pierwsze kody z pełnym zrozumieniem - bo już na samym jej początku dotyczącym pierwszych programów na procka wyjaśniam co, jak i gdzie a także od czego zależy - do czego jest "return 0" i dlaczego się z tego nie korzysta w zasadzie w prockach - gdy stosuje się pętlę główną ..... ty zaś mieszasz to jak się tylko da

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

krótko mówiąc wywal ten "return 0" ;) ale dalej kod nie będzie ci działać pewnie zgodnie z oczekiwaniem w pełni więc wywal też z kodu i nigdy nie używaj

#define F_CPU ... chociaż to też tu nie jest problemem i kod dalej nie będzie działać pewnie tak jak chcesz - no ale będzie działać poprawnie ;)

tobie za to łatwiej będzie go dalej rozbudowywać

Za to PODSTAWĘ na miganie diodą LED znajdziesz ZAWSZE tutaj:

http://mirekk36.blogspot.com/2015/07/ec ... ogram.html



Dziękuję, powoli liniowo uczę się. Ma Pan jeszcze książki w magazynie?

Największym problemem okazała się dioda migająca miast zwykłej, najzwyklejszej.

Teraz kod działa jak powinien, aktualnie 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.



Ledy zapalają się jedna po drugiej , gasną na 1 sek i od początku.

Pozdrawiam
Adam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2017, o 15:15 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Wejdź na stronę sklepu Atnel i sprawdź czy są książki na stanie.



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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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