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



Teraz jest 1 gru 2024, o 23:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 15 kwi 2013, o 12:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

Witajcie;
To mój pierwszy post w tym dziale wiec proszę o wyrozumiałość :P
Poniżej przedstawiam program napisany wczoraj- pierwsze testy wykazały poprawny pomiar do 20kHz (generator -program na PC wyjście karta dźwiękowa).
Zachęcam do komentowania jak i testowania, program napisany dla M32, 16MHz- reszta w komentarzach :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Rozjechały się komentarze :/

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2013, o 20:48 
Offline
Nowy

Dołączył(a): 21 sty 2013
Posty: 14
Pomógł: 0

witam!

pomysł fajny, przejrzałem i sam napisałem podobny. To co zmieniłem i mogę się doczepić to wrzucenie wszystkiego w przerwanie, głownie obsługi wyświetlacza. rozumiem że po to wyłączasz przerwania, żeby nic nie zakłóciło wykonywania tego jednego:) tylko mam wtedy wrażenie, może źle myślę, że na czas wyłączenia przerwań do obsługi lcd itp. uC nie liczy kolejnych impulsów i wynik może być nieprawidłowy. Ja osobiście w przerwaniu od timera0 bym tylko ustawiał flagę sprawdzaną w pętli głównej



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2013, o 23:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

Pomysł godny zastanowienia z tą flagą ;)
To pierwsza wersja, zapewne będzie ewoluowała. Jak na razie oprócz generatora na PC nie mam jak sprawdzić pomiarów, jutro pewnie jakiś kwarcowy na czas testów zbuduję i zobaczę jak z dokładnością.

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2013, o 06:40 
Offline
Moderator
Avatar użytkownika

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

janeczqu --> takie uwagi:

1. wyłączenie przerwań cli(); PODCZAS rozpoczęcia procedury obsługi przerwania jest ZAWSZE robione automatycznie przez procesor AVR - a zatem nie rób tego w kodzie przerwania

2. włączenie przerwań sei(); na zakończenie procedury obsługi przerwania jest robione AUTOMATYCZNIE przez procesor, więc tego też nie rób w kodzie przerwania. Przy czym o ile powyższe cli(); z pkt.1 akurat niczemu nie zaszkodzi - ot po prostu zbędny rozkaz, to już twój sei() pod koniec przerwania może czasem przynieść sieczkę w niektórych programach, płacz i zgrzytanie zębów - ponieważ odpalasz sei() przed epilogiem przerwania. Musisz bowiem pamiętać że makro przerwania ISR() wygląda mniej więcej tak

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


przy czym prolog i epilog składający się z rozkazów push i pop w asemblerze dodaje sam kompilator, a więc widzisz teraz że twoje sei() odpala się przez epilogiem i może narazić np stos procka na pokrębasienie ;)

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

kolejna rzecz, zmiennych globalnych nigdy nie inicjalizuje się ZEREM jak to robisz

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


zapamiętaj sobie po prostu, że one ZAWSZE są zerowane automatycznie przez kompilator. Czyli oczywiście to że zrobiłeś = 0 przy każdej z nich - nic nie zaszkodzi ale tak na prawdę jest ZUPEŁNIE niepotrzebne. Dopiero gdy potrzebujesz inicjalizować inną wartością niż zero - tak jak ostatnia ze zmiennych globalnych = 61 - wtedy jest OK

------------------------ [ Dodano po: 7 minutach ]

Następna uwaga, po RESECIE procka WSZYSTKIE piny są WEJŚCIAMI ponieważ rejestry DDRx są wyzerowane, a zatem pisanie takiej linii nie jest konieczne:

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


ale oczywiście to tylko informacyjnie bo nie wpływa to na jakieś złe działanie programu, ot po prostu niepotrzebnie zajęta pamięć FLASH. Chociaż dla porządku jak się zaczyna programować może być - ale ja często wtedy też komentuję sobie taką linię

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


------------------------ [ Dodano po: 11 minutach ]

na koniec, ZDECYDOWANIE ale to ZDECYDOWANIE - nigdy nie używaj jakichkolwiek poleceń do obsługi LCD w jakimkolwiek przerwaniu. To mniej więcej tak samo jakbyś użył tam _delay_ms(). Pamiętaj obsługa LCD jest bardzo powolna .... i tak jak podpowiadał ci już kolega wyżej można było po prostu zamiast tego bloku poleceń

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


ustawić po prostu jakąś zmienną globalną (flagę), np:

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


natomiast w pętli nieskończonej while(1) w funkcji main dać:

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


------------------------ [ Dodano po: 13 minutach ]

na zakończenie - to co napisałem, to nie żadna tam jakaś kocia krytyka, tylko takie hinty (podpowiedzi) z mojej strony - mam nadzieję, że w jakimś stopniu przydadzą się, i życzę powodzenia w dalszym kodowaniu ;)

_________________
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: 16 kwi 2013, o 08:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

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


To mnie Mirku zabiłeś z tymi włączeniami i wyłączeniami przerwań ;) Nie miałem o tym pojęcia nawet.
Inne rzeczy też poprawiłem- teraz będę walczył z bardziej "ludzkim" wyświetlaniem częstotliwości.

mirekk36 napisał(a):
na zakończenie - to co napisałem, to nie żadna tam jakaś kocia krytyka, tylko takie hinty (podpowiedzi) z mojej strony - mam nadzieję, że w jakimś stopniu przydadzą się, i życzę powodzenia w dalszym kodowaniu

Ależ nawet konstruktywna krytyka jest mile widziana, a uwagi "wklepuję" w elementarz ;)

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2013, o 08:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Zauważ, że jednak większość ma wyświetlacze 2x16. Tutaj zastosowałeś wyświetlacz z 4 liniami, ale jak ktoś będzie chciał zrobić to na mniejszym wyświetlaczu? Musi przerobić kod :)
Możesz dodać kilka linijek aby program był bardziej uniwersalny. Np. tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ale to już rozwinięcie programu. Do tego co jest teraz nie mam więcej zastrzeżeń.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2013, o 19:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2011
Posty: 156
Pomógł: 12

Witam chcialbym coś wtracić jeśli mogę , z tego co zuważyłem masz zadeklarowane
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

i tak chyba mi sie wydaje że coś tu nie tak jest gdyż uint32_t to troche wiecej niż int chyba że się myle.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2013, o 20:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

:oops: masz rację- tak to jest jak się nie przetestuje wszystkich parametrów...

Dzięki za zwrócenie na to uwagi, popracuję nad tym ;)

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2013, o 20:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2011
Posty: 156
Pomógł: 12

Nie ma sprawy myśle że jakbyś troche rozszeżył możliwości biblioteki od wyświetlacza i dopisał sobie funkcje wyświetlającą uint32_t było by O.K co się może przydać w przyszłości .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2013, o 20:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

gufim napisał(a):
akbyś troche rozszeżył możliwości biblioteki od wyświetlacza i dopisał sobie funkcje wyświetlającą uint32_t było by O.K
to jeszcze nie mój lvl -próbowałem ale na razie odpuszczam, zrobię to w inny sposób, nawet czytelność się zwiększy ;)
Ale to zapewne jutro dopiero ujrzy światło dzienne .

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2013, o 18:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

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



Po poprawkach.

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2013, o 08:49 
Offline
Użytkownik

Dołączył(a): 11 lut 2013
Posty: 140
Lokalizacja: Kraków
Pomógł: 10

w jaki sposob podlaczyles karte do klocka?? tzn.. w jaki sposob wzmocniles sygnal??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2013, o 10:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

matisek1233 napisał(a):
karte do klocka
:lol:

Przez głośniki aktywne ustawione na maxa- z wyjścia na słuchawki poprzez rezystor 470R i dwie diody jedna do masy druga do Vcc.

Przy testowaniu kwarców generator był zrealizowany na bramce NAND 4093 plus pozostałe jako bufor- przy zasilaniu takim jak procesor "po drodze" już nic nie wstawiałem.


Co ciekawe, przy kwarcu 4,000 wynik na wyświetlaczu to 3,998 czyli błąd procentowy na poziomie 0,05% :)

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2015, o 14:26 
Offline
Nowy

Dołączył(a): 02 lut 2015
Posty: 3
Pomógł: 0

Witam, napisałem wczoraj kod i nie działa, dopiero teraz znalazłem ten post i zobaczyłem że mam napisane to tak samo jak autor tematu.
Mam nadzieję że jeszcze ktoś tu zagląda i może mi coś podpowie.

Sprawdzałem wszystko na 1000 sposobów i problem leży w przerwaniu z Tim1. Odkryłem to kiedy wrzuciłem do instrukcji przerwania PORTD ^= (1<<1); i _delay_ms żeby sprawdzić za pomocą diody czy to przerwanie się wykonuje no i niestety nie.

Pacjent Atmega 88P 16 MHz
Do sprawdzenia podaję syg z PWM z pinu atmegi albo z zewnętrznego źródła, np czujnik światła generujący impuls prostokątny.

Czuję że błąd jest banalny, a ja już się zakręciłem w poszukiwaniu tego.

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


Czekam na krytykę i podpowiedzi.
Pozdrawiam serdecznie.



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

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