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



Teraz jest 8 lis 2024, o 14:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 11 sty 2012, o 14:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

Witam
Chciałbym sterować 6 diodami w ten sposób
http://upload.wikimedia.org/wikipedia/c ... lexing.png

Napisałem program, ale nie działa on prawidłowo.
W jaki sposób na pinie wymusić stan wysokiej impedancji?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2012, o 15:31 
Offline
Moderator
Avatar użytkownika

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

miszczo napisał(a):
W jaki sposób na pinie wymusić stan wysokiej impedancji?


To proste, wystarczy wymusić na nim stan dokładnie taki jaki jest po resecie mikrokontrolera, gdy wszystkie piny I/O są w stanie wysokiej impedancji. A zatem, ustawiasz kierunek pinu/portu za pomocą rejestru DDRx na wejście (czyli 0) i jednocześnie wystawiasz ZERO na dany pin ale w rejestrze PORTx - przez co likwidujesz programowe podciąganie do VCC - no i proszę - masz stan wysokiej impedancji.

_________________
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: 11 sty 2012, o 16:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

W takim razie w czym tkwi błąd w tym kodzie? Diodę podłączam między pb1, a pb0.

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


Btw czym róźni się taki zapis
PORTB |= _BV(0)
od takiego
PORTB = _BV(0)
Czy w obu przypadkach w rejestrze PORTB pojawi się wartość 0x01?

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2012, o 16:20 
Offline
Moderator
Avatar użytkownika

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

miszczo napisał(a):

Btw czym róźni się taki zapis
PORTB |= _BV(0)
od takiego
PORTB = _BV(0)
Czy w obu przypadkach w rejestrze PORTB pojawi się wartość 0x01?


Ja teraz bardzo przepraszam, ale muszę koledze (tak oczywiście pół żartem pół serio) udzielić oficjalnej nagany na naszym forum. Sądzę, że kolega posiada książkę "Mikrokontrolery AVR Język C Podstawy programowania" ? Toż poświęciłem w niej TYYYYYYYYYYYLE czasu aby wyjaśnić w SUPER szczegółach zasady stosowania tzw przesunięć bitowych, i polecałem aby to je właśnie stosować a nie posługiwać się tymi kocimi makrami _BV()

Więc mam nadzieję, że kolega się nie obrazi na mnie, że odeślę go do wspomnianej książki i poproszę o przeczytanie stosownego rozdziału, gdzie kurczę specjalnie fikuśne rysunki własnymi łapkami tworzyłem aby wyjaśnić jak działają przesunięcia typu np:

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


albo

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


to jest milion razy bardziej czytelne niż po stokroć kocie makra _BV() i tylko dlatego nie udzielę na to pytanie odpowiedzi. Chyba, że kolega poczyta wspomniany rozdział i zechce dopytać o coś na temat przesunięć, aby ew uzupełnić wiedzę przekazaną w książce, jeśli coś jeszcze będzie niezrozumiałe. Wtedy nadlecę jak jastrząb i postaram się wyjaśnić wszystko.

_________________
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: 11 sty 2012, o 18:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

Wiem jak działają przesunięcia, lecz jakoś nie lubię ich używać. Już domyśliłem się czym będzie różnić się taki zapis
PORTB |= _BV(0);
lub
PORTB |= (1<<PB0);
lub
PORTB |= 0x01;
od
PORTB = _BV(0);
lub
PORTB = (1<<PB0);
lub
PORTB = 0x01

W pierwszym przypadku zostanie zmieniony tylko najmłodszy bit rejestru PORTB, a reszta zostanie nienaruszona, natomiast drugi ustawi najmłodszy bit a resztę wyzeruję.

Napisałem też program, który steruje 12 diodami
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz przemyślę jak zrobić efekt taki jak na filmiku.
http://www.youtube.com/watch?v=MzOgxkCL ... er&list=UL

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2012, o 19:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

przemyśleć można too http://www.seekway.com.cn/e/ledsys9.htm
bo to co pokazałeś to się po prostu pisze :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



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

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