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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 18 cze 2025, o 23:54


    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 ] [ Zaznacz wszystko ]
    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: 27409
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 0 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