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



Teraz jest 18 mar 2026, o 19:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
Autor Wiadomość
PostNapisane: 18 gru 2013, o 19:18 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

Cześć mam mały problem ponieważ wszystko działa tylko nie miernik (coś z kodem chyba nie tak)

tutaj konsola:
**** Build of configuration Release for project 04_LCD ****

make all
'Building target: 04_LCD.elf'
'Invoking: AVR C Linker'
avr-gcc -Wl,-Map,04_LCD.map -mmcu=atmega8 -o "04_LCD.elf" ./LCD/lcd44780.o ./1Wire/crc8.o ./1Wire/ds18x20.o ./1Wire/onewire.o ./main.o
./main.o: In function `main':
main.c:(.text.startup+0x74): undefined reference to `display_temp'
main.c:(.text.startup+0x120): undefined reference to `display_temp'
main.c:(.text.startup+0x13a): undefined reference to `display_temp'
collect2: ld returned 1 exit status
make: *** [04_LCD.elf] Błąd 1

**** Build Finished ****



a tutaj kod:

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



i nie wiem za bardzo czego to się tyczy, wyświetla mi tylko ostrzeżenie przy POWER_PARASITE
i jak to zrobić aby pomiar był wyświetlany po numerem case 1 ?

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 19:37 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

nie masz zdefiniowanej funkcji display_temp()

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

usp... to znaczy masz ale nie w tym miejscu ;-) czyli nie masz...
Przenieś całą tą funkcję pod main.
Mniej więcej pod pomiar a przed przerwaniami.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 19:56 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

MirkoT napisał(a):
nie masz zdefiniowanej funkcji display_temp()

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

usp... to znaczy masz ale nie w tym miejscu ;-) czyli nie masz...
Przenieś całą tą funkcję pod main.
Mniej więcej pod pomiar a przed przerwaniami.



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


Niestety dalej to samo...

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 21:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

witam
deklaracje funkcji (czyli jej nazwę wraz z parametrami i typem zwracanym )
umieść przed main a całą
definicję (czyli całe ciało) przenieś za główną funkcję main()


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 21:39 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

To co przeniosłeś czyli deklarację ma być na górze przed main.
A "ciało" funkcji czyli jej definicję w to miejsce gdzie przeniosłeś deklarację

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 21:42 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

Zaba napisał(a):
witam
deklaracje funkcji (czyli jej nazwę wraz z parametrami i typem zwracanym )
umieść przed main a całą
definicję (czyli całe ciało) przenieś za główną funkcję main()




Ok teraz ''działa'', tylko wyswietla mi sie tmp 85*c (nie wiem dlaczego)
i czy da się zrobic tak aby tmp. pokazywalo w menu 1?

_________________
http://matkowalik.pl/



Ostatnio edytowano 18 gru 2013, o 21:48 przez KoWaL, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 21:43 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

W linii 38 masz deklarację. I tak niech zostanie to jest/było OK.
Zaś definicję czyli to co masz w liniach od 154 do 163
przenieś do linii 328.
I powinno się coś zmienić

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 21:47 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

MirkoT napisał(a):
W linii 38 masz deklarację. I tak niech zostanie to jest/było OK.
Zaś definicję czyli to co masz w liniach od 154 do 163
przenieś do linii 328.
I powinno się coś zmienić



Ok to już zrobiłem teraz pozostaje problem @up

------------------------ [ Dodano po: 2 minutach ]

Przy pierwszym wlaczeniu przed ukazaniem się menu pojawia sie 24*C a pozniej juz caly czas 85*

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 21:50 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

KoWaL napisał(a):
Ok teraz ''działa'', tylko wyswietla mi sie tmp 85*c (nie wiem dlaczego)
i czy da się zrobic tak aby tmp. pokazywalo w menu 1?

No jeżeli wywołasz funkcję wyświetlania w meniu 1 to powinno wyświetlać a dlaczego by nie?


Autor postu otrzymał pochwałę

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:01 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

MirkoT napisał(a):
KoWaL napisał(a):
Ok teraz ''działa'', tylko wyswietla mi sie tmp 85*c (nie wiem dlaczego)
i czy da się zrobic tak aby tmp. pokazywalo w menu 1?

No jeżeli wywołasz funkcję wyświetlania w meniu 1 to powinno wyświetlać a dlaczego by nie?




To już gotowe, ale tylko przez chwile wyswietla prawidłową temp. a później znów na 85*

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:06 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

skoro raz wyświetla dobrze to i następnym razem też powinien.
Ile masz czujników?
Pokaż teraz kod po poprawkach.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:14 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

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

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:21 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

czekaj, czegoś nie rozumiem...
Jak może Ci wyświetlać jakąkolwiek temperaturę, jak całe ciało funkcji display_temp masz zakomentowane? :?: :?:

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:23 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

MirkoT napisał(a):
czekaj, czegoś nie rozumiem...
Jak może Ci wyświetlać jakąkolwiek temperaturę, jak całe ciało funkcji display_temp masz zakomentowane? :?: :?:




No i właśnie tego nie czaje bo jak dam to tam to mi sie cały czas wszedzie to wyświetla a jak tam pod case 1 to tylko na case 1

a 85 wyswietla sie po chwili niezależnie czy to jest tam czy w case 1 :/

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:30 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

posłuchaj.
żeby funkcja coś robiła musi mieć swój kod, prawda?
ten kod nie może być cały komentarzem! bo wtedy funkcja nic nie robi ;-) Jest pomijana
Jeżeli chcesz żeby wyświetlało się w menu 1 to po prostu
w menu 1 ją wywołujesz 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.

Oczywiście to tyko ogólny przykład...

------------------------ [ Dodano po: 2 minutach ]

Jeżeli definicja funkcji 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.

Nic ci się nie może i nie wyświetli

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:38 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

Ok a mógłbyś to jakoś sprecyzować to wyświetlanie?
już odkomentowałem ale to wtedy w każdej cześci programu wyświetla mi sie 85

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:49 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Za dużo rzeczy chcesz zrobić na raz.
stwórz nowy projekt i spróbuj najpierw tylko pomiar temp z jednym czujnikiem bez
niczego więcej i wyświetlanie w różnych miejscach wyświetlacza. Np. raz w zerowym wierszu
i 2 kolumnie potem w 1 wierszu i 5 kolumnie.
Czyli ta część programu gdzie co sekundę wykonują się sprawdzenia, konwersja i odczyt temp.
Do wyświetlania wykorzystaj swoją funkcję: void display_temp(uint8_t x)
Jak zadziała tak jak chcesz i oczekujesz wtedy dopiero dodaj następne rzeczy.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:52 
Offline
Użytkownik

Dołączył(a): 10 paź 2012
Posty: 123
Pomógł: 10

KoWaL napisał(a):

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


Mimo wykomentowania display_temp wyświetli się temperatura poprzez wykonanie powyższego kawałka kodu.
KoWaL napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tym Timerem to co chcesz osiągnąć? Wydaje mi się że s1_flag nigdy nie będzie 1 bo zawsze po wejściu w obsługę przerwania zerujesz cnt - static uint8_t cnt=0; więc warunek if(++cnt>99) nigdy nie będzie spełniony.
Wynik 85 oznacza błąd konwersji - może być spowodowany np. tym że zbyt szybko chcesz odczytać temperaturę po rozpoczęciu pomiaru. napisz też czy stosujesz 2 czy 3 przewodowe podłączenie DS-a.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 22:55 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

Mimo wykomentowania display_temp wyświetli się temperatura poprzez wykonanie powyższego kawałka kodu.
KoWaL napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tym Timerem to co chcesz osiągnąć? Wydaje mi się że s1_flag nigdy nie będzie 1 bo zawsze po wejściu w obsługę przerwania zerujesz cnt - static uint8_t cnt=0; więc warunek if(++cnt>99) nigdy nie będzie spełniony.
Wynik 85 oznacza błąd konwersji - może być spowodowany np. tym że zbyt szybko chcesz odczytać temperaturę po rozpoczęciu pomiaru. napisz też czy stosujesz 2 czy 3 przewodowe podłączenie DS-a.[/quote]



Stosuje połączenie na 2 przewody parasite a timer to taki był przykład w książce.

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 23:07 
Offline
Użytkownik

Dołączył(a): 10 paź 2012
Posty: 123
Pomógł: 10

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

masz że 3 przewodowe tzn. z zewnętrznym zasilaniem.
Do 2 - przewodowego wywołanie jest z parametrem parasite:

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: 5 minutach ]

KoWaL napisał(a):
a timer to taki był przykład w książce.

A konkretnie w której lekcji z której książki?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 23:16 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

jark napisał(a):
A konkretnie w której lekcji z której książki?



bluebook o transmisji 1wire.


może dziwne ale zrobiłem tak i wszystko działa:

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: 1 minucie ]

_________________
http://matkowalik.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 23:45 
Offline
Użytkownik

Dołączył(a): 10 paź 2012
Posty: 123
Pomógł: 10

jark napisał(a):
Tym Timerem to co chcesz osiągnąć? Wydaje mi się że s1_flag nigdy nie będzie 1 bo zawsze po wejściu w obsługę przerwania zerujesz cnt - static uint8_t cnt=0; więc warunek if(++cnt>99) nigdy nie będzie spełniony.

:oops: Tak to jest jak sie 10 rzeczy na raz robi :) Umknął mi specyfikator static :oops:
Oczywiście będzie zwiększała się wartość cnt - mój błąd.
Co do wywołania funkcji pomiarowej powinieneś jednak użyć odpowiedniej dla zastosowanego podłączenia.
A co tak z ciekawości zapytam zmieniłeś konkretne że działa?
Pozdrawiam
Jarek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2013, o 23:54 
Offline
Użytkownik

Dołączył(a): 28 lis 2013
Posty: 173
Lokalizacja: Pszczyna
Pomógł: 0

jark napisał(a):
A co tak z ciekawości zapytam zmieniłeś konkretne że działa?
Pozdrawiam
Jarek


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



dodałem zerowanie licznika setnych ms

i przepisałem prawie wszystko od nowa(może coś mi umknęło (ale żeby 3 razy to samo???))

A tak szczerze to za bardzo nawet nie wiem :)

_________________
http://matkowalik.pl/



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO