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



Teraz jest 7 lut 2025, o 17:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 26 paź 2012, o 09:57 
Offline
Nowy

Dołączył(a): 25 paź 2012
Posty: 3
Pomógł: 0

Witam Was, zrobiłem sobie czysto testowo kod, który wyświetla temperaturę na LCD oraz wysyła ją do komputera.
Pomysły rozwojowe były trzy.
1. wszystko w pętli + delay i to działa, wiem że nie zalecane ale działa, czyli odczyt temperatury oraz wysyłanie danych za pomocą podstawowej funkcji na wysyłanie danych z dokumentacji
2. wywalenie delaya dodanie timera oraz timera programowego takiego jak stosowany do odczytu temperatury w książce
3. to co powyżej tylko dodanie przerwania na wysyłanie danych z uarta oraz dodanie bufora cyklicznego.
Problem polega na tym, że timer2 (chyba) atmegi8 kłóci się z przerwaniem od uarta. Nie wiem jak ale odczyt temperatury zamiera i jest pokazywana ta sama temperatura.
Program nie zawiesza się, ale jest jak by opóźnienie przy wysyłaniu danych w pętli głównej.
Kod teraz 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.


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


Zastosowałem zmienną uart_przerwanie która daje znać by dane zostały wysłane jeżeli coś się w buforze pojawi, nie wiem czy tak jest poprawnie ale inaczej nie chce działać. Pytanie czy dobrze robię, może coś pominąłem.
kod na odczyt temperatury

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


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


Kod nie zmieniony praktycznie z oryginału, dodałem tylko co CRC

Pozdrawiam sedecznie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2012, o 10:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Jest i będzie opóźnienie .......... zobacz co żeś uczynił w przerwaniu ........ Wysyłasz tam dane :( stąd te opóźnienia.
Przenieś wysyłanie do pętli głównej ..........



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2012, o 10:28 
Offline
Moderator
Avatar użytkownika

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

To co pisze kolega wyżej to JEDNO :( .... (to co zrobiłeś w tym przerwaniu timera2 to po prostu totalne nieporozumienie :(

I jak można po takim kodzie pisać że timer2 gryzie się z UART'em ? One się nie gryzą - wcale - to ty je podpuściłeś na siebie i jeden blokuje drugiego ..... TAK nie można :(

masz w książce przykład jak wysyłać dane zarówno w wersji z buforem jak i bez. Ja dodam od siebie, że akurat samo wysyłanie przez UART jest tak mało krytyczne, że najspokojniej w świecie można je zrobić nawet bez buforów cyklicznych - ot tak wprost w poolingu i z pętli głównej po pomiarze

Za to już całkowitą moją konsternację budzi fakt, że masz w książce tzn na DVD świetne biblioteki do 1wire, i to już z crc, tymczasem ty używasz innych .... które .... hmmm teraz nie będę ich analizował ale po prostu mogą mieć jeszcze błędy - skoro z marszu nie było wszczepionego crc.

Skąd takie pomysły ?

Wystarczyłoby użyć dokładnie tego przykładu który jest w książce i dodać bibliotekę UART do niego i po każdym pomiarze w pętli głównej (dokonywanym przy pomocy timerów programowych) od razu wysyłać dane do terminala, NAWET w tej funkcji, która wyświetla wyniki ....

wtedy BEZ ŻADNYCH kombinacji miałbyś zrealizowane WSZYSTKO co zamierzałeś .... oczywiście wiadomo, że warto ten projekt z DVD pozmieniać nieco i dostosować do własnych potrzeb (mówię tu o main.c)

_________________
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: 26 paź 2012, o 11:13 
Offline
Nowy

Dołączył(a): 25 paź 2012
Posty: 3
Pomógł: 0

Mirek, źle mnie zrozumiałeś, tam zakomentowane jest przerwanie, bo z nim nie działało, bibliotekę sprawdzę (ds), tą wcześniej używałem dlatego dałem.
Z jednej strony z tym wysyłaniem naraz masz racje, ale danych będzie więcej. I przyznam się szczerze, że nie wiem jak policzyć czy się zmieszczę,
Dane będą miały format mniej więcej
temperatura (liczba czujników 1 do 20) wilgotność (1-5) (inne parametry sztuk 5-10) i to za jednym ciągiem wysyłane, w jakim czasie je powinienem wysyłać?, kiedy tak naprawdę zabraknie mi czasu przy wysyłaniu bez bufora, prędkość mam 9600 ale i 115200 działa ok bo mam 14745600 kwarc więc mogę więcej wyciągnąć.
Czy te wszystkie dane pakować do jednej zmiennej dać w pętli uart_putc czy inaczej się to rozwiązuje?, chciałbym to w jednej linii dać bo jedna paczka to jeden rekord w bazie danych
Pozdrawiam i dzięki za poprzednie odpowiedzi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2012, o 11:27 
Offline
Moderator
Avatar użytkownika

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

orideith napisał(a):
Mirek, źle mnie zrozumiałeś, tam zakomentowane jest przerwanie, bo z nim nie działało,


Widziałem że jest zakomentowane ale to kolejny twój błąd - a to z tego powodu że nie do końca zrozumiałeś na jakiej zasadzie wysyła się dane przez UART :( .... no zobacz - potem w timerze masz:

Kod:
UDR = UART_TxBuf[UART_TxTail];


to jest straszny ZONK :(

bufor cykliczny przygotowany jest SPECJALNIE, podkreślam SPECJALNIE do współpracy z przerwaniami - naprawdę MUSISZ jeszcze raz o nim przeczytać rozdział, a ty sobie niefrasobliwie - bo coś tam nie działało - na zasadzie "a może się uda" przeniosłeś kod z przerwania UART'a do przerwania Timera - w takim wykonaniu BĘDZIE SIĘ TO GRYZŁO niestety :(


orideith napisał(a):
bibliotekę sprawdzę (ds), tą wcześniej używałem dlatego dałem.


A ok, no rozumiem ... ale polecam ci jednak tą z książki, tylko nie myśl że chodzi mi tu o propagowanie mojej biblioteki bo jest najlepsza na świecie - tak nawiasem mówiąc to nie moja biblioteka i podaję w książce autora, ja ją tylko co nieco zmodyfikowałem.


orideith napisał(a):
Z jednej strony z tym wysyłaniem naraz masz racje, ale danych będzie więcej. I przyznam się szczerze, że nie wiem jak policzyć czy się zmieszczę,

Jeśli chodzi o wysyłanie z poziomu pętli głównej to nie musisz nic liczyć - WSZYSTKO zmieścisz

orideith napisał(a):
Dane będą miały format mniej więcej
temperatura (liczba czujników 1 do 20) wilgotność (1-5) (inne parametry sztuk 5-10) i to za jednym ciągiem wysyłane, w jakim czasie je powinienem wysyłać?, kiedy tak naprawdę zabraknie mi czasu przy wysyłaniu bez bufora, prędkość mam 9600 ale i 115200 działa ok bo mam 14745600 kwarc więc mogę więcej wyciągnąć.


Ty się nie martw na zapas ;) bo ja myślę że przy 9600 się zmieścisz a przy 115200 to zapomnij nawet o tym żeby się w najmniejszym stopniu martwić o to czy zdążysz ? ;) ... raczej musiałbyś się starać o to aby zapchać taką transmisję ;)

orideith napisał(a):
Czy te wszystkie dane pakować do jednej zmiennej dać w pętli uart_putc czy inaczej się to rozwiązuje?, chciałbym to w jednej linii dać bo jedna paczka to jeden rekord w bazie danych
Pozdrawiam i dzięki za poprzednie odpowiedzi


ZDECYDOWANIE można w jednej paczce - w jednej linii. Zwracaj tylko uwagę na rozmiary tej wypychanej linii względem wielkości buforów cyklicznych (nadawczych)

reasumując - wszystko ci się uda - tylko najpierw do testów - próbuj zrobić porządek na mniejszym kodzie testowym z wysyłaniem mniejszej ilości ale POPRAWNIE a nie w taki sposób OK ?

_________________
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: 26 paź 2012, o 11:55 
Offline
Nowy

Dołączył(a): 25 paź 2012
Posty: 3
Pomógł: 0

Ok, wrócę do twojego rozwiązania z DS`em (biblioteka) i spróbuję darować sobie bufor cykliczny, dam go do odbierania danych ale to jak to będzie działało poprawnie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2012, o 13:54 
Offline
Moderator
Avatar użytkownika

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

Więc jak zrobisz w oparciu o to co w książce - korzystając z tych bibliotek - to potem śmiało wklej w razie czego swój plik main.c gdybyś jeszcze miał kłopoty jakieś i szybko wspólnie pomożemy ich się pozbyć ;)

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

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