logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ds18b20 kłopot z kompilacją programu

07 Mar 2011 20:03 3985 31
  • #1 9248002
    Konto nie istnieje
    Poziom 1  
  • #2 9249878
    duke_luke
    Poziom 15  
    Kompilator wyraźnie mówi Ci w czym jest problem :

    C:\termometr cyfrowy/main.c:44: undefined reference to `ds18b20_ConvertT'
    C:\termometr cyfrowy/main.c:53: undefined reference to `ds18b20_Read'

    Nie rozpoznawane są funkcje ds18b20_ConvertT oraz ds18b20_Read, musiałeś gdzieś przegapić ich definicję, po południu zerknę w pliki które zamieściłeś i postaram się coś Ci pomóc.
  • #3 9250691
    dondu
    Moderator na urlopie...
    W moim AVR Studio Twój projekt skompilował się prawidłowo dla Atmega8.

    Cytat:

    rm -rf ds18b20.o hd44780.o main.o temperatura.elf dep/* temperatura.hex temperatura.eep temperatura.lss temperatura.map
    Build succeeded with 0 Warnings...
    avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT ds18b20.o -MF dep/ds18b20.o.d -c ../ds18b20.c
    avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT hd44780.o -MF dep/hd44780.o.d -c ../hd44780.c
    avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c
    avr-gcc -mmcu=atmega8 -Wl,-Map=temperatura.map ds18b20.o hd44780.o main.o -o temperatura.elf
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature temperatura.elf temperatura.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex temperatura.elf temperatura.eep || exit 0
    avr-objdump -h -S temperatura.elf > temperatura.lss

    AVR Memory Usage
    ----------------
    Device: atmega8

    Program: 4338 bytes (53.0% Full)
    (.text + .data + .bootloader)

    Data: 290 bytes (28.3% Full)
    (.data + .bss + .noinit)

    Build succeeded with 0 Warnings...


    Domyślam się, że nie używasz AVR Studio męcząc się tworząc Makefile własnoręcznie.
    Niestety nie wiem, co może być przyczyną Twojego problemu - może to właśnie plik Makefile?
    I przejdź na AVR Studio 4 póki wersja 5 nie będzie dopracowana (bo na razie wersja Beta).
  • #4 9251407
    Konto nie istnieje
    Poziom 1  
  • #6 9251498
    Konto nie istnieje
    Poziom 1  
  • #7 9251527
    dondu
    Moderator na urlopie...
    Nie żądaj ode mnie tłumaczenia Tobie tak podstawowych rzeczy.
    Od tego są odpowiednie funkcje w menu programu, o którym pisałem.
    A jeżeli będziesz miał problem, to od tak oczywistych spraw jest Help, a w ostateczności zrzut ekranu i pytanie na forum.

    Trochę własnej inicjatywy kolego i będzie efekt - my będziemy mieć spokój, a Ty wiedzę :)
  • #8 9251739
    Konto nie istnieje
    Poziom 1  
  • #9 9251757
    dondu
    Moderator na urlopie...
    Z menu project wybierz Project Wizard i on ciebie poprowadzi.
    Gdy nie będziesz czegoś wiedział z danego ekranu napisz lub załącz screen.

    Dodano po 26 [minuty]:

    byxu napisał:
    No dobra jest takie coś tylko w tym folderze z projektem nigdzie nie ma pliku main.hex

    avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
    
    
    Build succeeded with 0 Warnings...
    


    W katalogu w którym umieściłeś projekt utworzony został zapewne folder DEFAULT. Tam znajdziesz plik hex.
  • #10 9251929
    Konto nie istnieje
    Poziom 1  
  • #12 9251978
    Konto nie istnieje
    Poziom 1  
  • #13 9252978
    dondu
    Moderator na urlopie...
    Opisz dokładnie jakie są objawy.

    Dodano po 3 [minuty]:

    Z kodu wywal definicję F_CPU
    W menu PROJECT > CONFIGURATION OPTIONS w polu FREQUENCY wpisz częstotliwość zegara
    a w polu polu OPTIMIZATION wybierz: -0s
  • #14 9253023
    Konto nie istnieje
    Poziom 1  
  • #16 9253052
    Konto nie istnieje
    Poziom 1  
  • #17 9253058
    dondu
    Moderator na urlopie...
    byxu napisał:
    ... tylko że teraz w drugiej lini gdzie ma być temperatura jest ?°C

    Czyli postęp jest, daj mi chwilę na zastanowienie się , a za ten czas popraw pisownię.

    Dodano po 7 [minuty]:

    Zróbmy eksperyment:

    przed linijką: sprintf(str,"%4.1f\xdf""C", temp);
    dodaj: temp = 12;

    czyli tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i zobacz czy wyświetli ją prawidłowo.

    i jeszcze raz popraw posta: https://www.elektroda.pl/rtvforum/topic1935506.html#9253023
    używając przycisku PISOWNIA.
  • #18 9253116
    Konto nie istnieje
    Poziom 1  
  • #19 9253130
    dondu
    Moderator na urlopie...
    byxu napisał:
    żadnej zmiany, dalej ?°C a może błąd jest w tych makrodefinicjach do obsługi czujnika czyli w plikach ds18b20.h lub ds18b20.c

    Skoro temp ma wartość 12 wprowadzoną przed konwersją na ciąg znaków przez SPRINTF, to znaczy, że prawdopodobnie SPRINTF... działa nieprawidłowo i tym musimy się zająć.
  • #20 9253136
    Konto nie istnieje
    Poziom 1  
  • #22 9253149
    Konto nie istnieje
    Poziom 1  
  • #24 9253157
    Konto nie istnieje
    Poziom 1  
  • #26 9253180
    Konto nie istnieje
    Poziom 1  
  • #27 9253190
    dondu
    Moderator na urlopie...
    Tak jak napisałem wcześniej moim zdaniem problem leży w przekształcaniu liczby na ciąg znaków za pomocą sprintf ponieważ wykonując
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    powinieneś otrzymać na wyświetlaczu: 12.0°C , a nie otrzymujesz.

    Dodano po 1 [minuty]:

    Zrób jeszcze tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #28 9253197
    Konto nie istnieje
    Poziom 1  
  • #30 9253203
    Konto nie istnieje
    Poziom 1  
REKLAMA