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



Teraz jest 10 lip 2026, o 00:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 23 lut 2014, o 20:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Witam ,od piątku zacząłem przygodę z C ,jak na razie bawię się miganie diod ,obsługą timerów i przerwań.
Z LCD dałem sobie spokój (jak na dziś za wysokie progi :) ), napisałem prosty programik poniżej ,mam pytanie czy oprócz instrukcji
warunkowych IF {} ,jest może jakaś komenda typu "shift register" ,która uprości program.

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


Zdecydowałem się na zapis binarny stanu portów ,bo w tym przypadku było mi łatwiej je ustawiać w warunkach IF.

P.S. Mam nadzieję ,że dobrze wkleiłem kod, po raz pierwszy to robię ,więc proszę o wyrozumiałość :) ,pozdrawiam.

Kody wklejamy przy pomocy syntax=c - Różowo-zielony (czyli sraczkowy) J.

_________________
sig off ;(



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

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

mac34 napisał(a):
jest może jakaś komenda typu "shift register"

<<
>>

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



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

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Albo można to też zrobić instrukcją for , gdzie na końcu pętli będzie mnożenie jakiejś zmiennej razy 2 i wysyłanie tej wartości na PORTB.



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

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Ok zapamiętam jak wklejać kod.

Zaraz wypróbuję operatory << >>

Jeszcze jedno pytanie ,żeby nie zakładać 100 tematów.
Gdybym kiedyś chciał w dowolnej chwili zatrzymywać Timery i ponownie startować. (w danych punktach programu)
Jak to zrobić w C ?

Znam komendy (tu niewiele pomogą )
Start Timer0 ,Stop Timer0
Start Counter0 ,Stop Counter0


Wybaczcie ,że mówię trochę bo "Bascomowemu" ,ale tak jak pisałem od piątku przechodzę na C (same nawyki tylko trochę przeszkadzają, ale nie do końca ,czasami strukturę programu można upodobnić ,co ułatwia) ,najważniejsze to poznać poprawną składnię. Dlatego pytam o ten Start i Stop Timerów.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 20:26 
Offline
Nowy

Dołączył(a): 23 lut 2014
Posty: 20
Lokalizacja: Szczecinek
Pomógł: 3

Zrób sobie pętelkę i tak jak kolega wyżej pokazał:
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: 23 lut 2014, o 20:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

stan_rejestru==14 i 0 się powtarzają przez co na 1 led stoi dłużej :)

a komendy to << >> jak kolega wyżej napisał


mac34 masz moze BB ??
1 zadanie miganie diodą :) tam deklarujesz sobie porty z przesunięciami rejestrów.

_________________
Usługi druku przestrzennego - www.drumik.pl



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

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

mac34 napisał(a):
TIMSK |= (1<<TOIE0); //zezwolenie na przerwanie z przepełniena timera ,tryb normal

Skoro ustawienie tego bitu na 1 zezwala na przerwanie TIMER0_OVF to ustawienie go na 0 wyłączy to przerwanie ;)
A do globalnych masz
cli();

PS. Zrób ten efekt w przerwaniu bez użycia dodatkowej zmiennej :twisted:

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Ostatnio edytowano 23 lut 2014, o 20:30 przez barney, łącznie edytowano 1 raz

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

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Mam BB ,nie ośmieliłbym się zacząć bez niego :) ,bardzo pomógł. Tego powtarzania w 14 nie widać.

Ale poprawię ,dzięki.

_________________
sig off ;(



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

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

mac34 napisał(a):
Gdybym kiedyś chciał w dowolnej chwili zatrzymywać Timery i ponownie startować. (w danych punktach programu)
Jak to zrobić w C ?


Musisz przygotować sobie funkcję np. Stop_Timer() a polegała ona będzie na ustawieniu wszystkich bitów odpowiadających za preskaler na 0 np.

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: 23 lut 2014, o 20:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

A czemu koniecznie funkcje?

I według mnie powinno to 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.

_________________
sig off ;(



Ostatnio edytowano 23 lut 2014, o 20:54 przez LogTeam, łącznie edytowano 1 raz

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

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Cytuj:
Skoro ustawienie tego bitu na 1 zezwala na przerwanie TIMER0_OVF to ustawienie go na 0 wyłączy to przerwanie ;)
A do globalnych masz
cli();


Ok ,ale czy nie utracę wartości rejestru ,załóżmy ,że doliczył do 135 ,jak dam TIMER0_OVF na 0 to się zatrzyma rozumiem ,ale jak dam
TIMER0_OVF na 1 to wznowi od 135 ,czy od 0 ???

Cytuj:
PS. Zrób ten efekt w przerwaniu bez użycia dodatkowej zmiennej :twisted:


Nie wiem czy to dobry pomysł ,Mirek zawsze mówił ,że przerwania mają być jak najkrótsze ,dlatego warunki dałem do pętli głównej.

_________________
sig off ;(



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

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Cytuj:
A czemu koniecznie funkcje?

Nie napisałem, że koniecznie, ale ja wolę zrobić sobie króciutką funkcję i nie rozpisywać się za bardzo.

LogTeam napisał(a):
I według mnie powinno to wyglądać tak:


185 strona BB :)

Pozdrawiam.



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

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

mac34 napisał(a):
Ok ,ale czy nie utracę wartości rejestru ,załóżmy ,że doliczył do 135 ,jak dam TIMER0_OVF na 0 to się zatrzyma rozumiem ,ale jak dam
TIMER0_OVF na 1 to wznowi od 135 ,czy od 0 ???

Timer liczy sobie dalej i generuje ewentualne przebiegi PWM, wyłączasz jedynie przerwania od niego.
Wartość rejestru liczącego w momencie ponownego uruchomienia przerwań jest więc nieprzewidywalna (bez liczenia cykli zegarowych).

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



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

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Ok rozumiem ,jak w tabelce z noty.

A ponowny Start??? (automatycznie poprzez wybranie preskalera) ???

Faktycznie trochę długa linijka przydałoby się jakieś MAKRO ,ale do tego etapu jeszcze już nie doszłem. Choć już wiem dokąd zmierzać, dzięki.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 21:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

kaka0204 napisał(a):
Cytuj:
A czemu koniecznie funkcje?

Nie napisałem, że koniecznie, ale ja wolę zrobić sobie króciutką funkcję i nie rozpisywać się za bardzo.

LogTeam napisał(a):
I według mnie powinno to wyglądać tak:


185 strona BB :)

Pozdrawiam.

Ale kolega w swoim kodzie neguje tylko rejestr CS00

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 21:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

LogTeam napisał(a):
Ale kolega w swoim kodzie neguje tylko rejestr CS00


Ahh... Faktycznie, moje niedopatrzenie. Oczywiście powinno być tak:


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


Sokole oko :D



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

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