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

Plik *.c w projekcie z HD44780 działa tylko po skopiowaniu do main.c - dlaczego?

Albi1983 29 Kwi 2015 12:46 714 7
  • #1 14654281
    Albi1983
    Poziom 10  
    Witam

    Mam taki problem:

    Napisałem program i niby działa niby nie już tłumaczę jak to się objawia:

    Posiadam w tym programie jedną bibliotekę *.h i jeden plik *.c obydwa pliki znajdują się w katalogu z projektem, są to pliki związane z HD44780

    problem jest następujący jak plik *.c jest osobno to program nie działa tzn nie wyświetla mi LCD natomiast jak wsadzę cała zawartość pliku *.c do pliku main.c to działa bez żadnych zarzutów.

    Dodam tylko jak radził mi tutaj już dondu, że po dodaniu pliku do projektu Add>Existing Item program nie wykrywa mi żadnych błędów.

    Dołączam spakowany projekt w pierwszej wersji tzn z plikiem *.c skopiowanym do pliku main.c

    Moja druga prośba jest następująca, czy ktoś mógłby mi podesłać jakiś poradnik/przewodnik po RTC ?

    Prosiłbym nie krzyczeć na mnie za F_CPU w kodzie.
    Ciągle zapominam to zrobić

    Pozdrawiam
  • #3 14654312
    Albi1983
    Poziom 10  
    Wszystko jest tak jak mówisz, na początku mam deklarację:

    #include "HD44780.h"

    Nawet przekopiowałem ten plik do katalogu z plikami nagłówkowymi Atmel Studio i zdeklarowałem plik tak:

    #include <HD44780.h>

    Też to nic nie dało.

    Jak plik HD447780.c przekopiuję w całości do pliku głównego (tam, gdzie mam int main(void) oraz while(1) to wszystko działa ok, wyświetlacz działa, lecz jak dam ten plik osobno, to już wyświetlacz nie działa. :(

    Kompilator nie wyrzuca mi żadnych błędów
  • #4 14654395
    Steryd3
    Poziom 33  
    To co podesłałeś to wersja ze skopiowanymi funkcjami do pliku gdzie znajduje się funkcja main().
    Podeślij może ten niedziałający projekt który wysyła coś na wyświetlacz- nawet gdyby się nie kompilował lub nie działał.
    Rozumiem, że gdy dodawałeś pliki do obsługi wyświetlacza to w pliku HD44780.h dobrze pookreślałeś co jest na którym pinie?
    Nigdy nie miałem podobnych problemów więc to musi być jakiś niewielki błąd.
  • #5 14654432
    Albi1983
    Poziom 10  
    Podsyłam wersje nie działającą.

    Na działającej wszystko jest dobrze bo mi wyświetla wszystko poprawnie.
  • #6 14655771
    Konto nie istnieje
    Konto nie istnieje  
  • #7 14667414
    Albi1983
    Poziom 10  
    Jakby było źle zdefiniowane lub w ogóle nie byłoby zdefiniowane F_CPU to plik nagłówkowy delay.h wymusiłby taktowanie zegara 1 MHz więc to nie chodzi o to.

    Nawet jak zdefiniowałem to F_CPU w programie to nic to nie dało :( Efekt jest taki sam

    Tzn może inaczej wszystko inne działa oprócz wyświetlacza LCD
  • #8 14667510
    dondu
    Moderator na urlopie...
    Posłuchaj:
    - pomaganie początkującym ma sens tylko wtedy, gdy stosują się oni do naszych uwag.
    - zdalne (na forum) pomaganie nie pozwala nam na szybkie zaglądnięcie w to co masz na swoim biurku, stąd pokazujemy Ci problemy, które powinieneś załatwić, które nota bene kompilator wyrzuca Ci komunikatem:

    Cytat:
    Warning 1 #warning "F_CPU not defined for <util/delay.h>" [-Wcpp] c:\program files\atmel\atmel toolchain\avr8 gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\util\delay.h 90 3 Test


    Dostajesz od nas po raz n-ty (patrząc na poprzednie Twoje tematy) informację, że masz zdefiniować F_CPU w opcjach projektu, to zrób to, albo zamknij temat skoro i tak nas nie słuchasz, bo jeżeli nie eliminujesz problemów po kolei, to tracisz czas a my razem z Tobą.


    W Twoim programie znajdujemy:

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


    a według Twojej (słusznej zresztą) uwagi:

    Albi1983 napisał:
    Jakby ... lub w ogóle nie byłoby zdefiniowane F_CPU to plik nagłówkowy delay.h wymusiłby taktowanie zegara 1 MHz ...


    jaką więc częstotliwością jest taktowany mikrokontroler?

    Czy nie wydaje Ci się to zbieżne z efektem jaki uzyskujesz?:

    Albi1983 napisał:
    Posiadam w tym programie jedną bibliotekę *.h i jeden plik *.c obydwa pliki znajdują się w katalogu z projektem, są to pliki związane z HD44780

    problem jest następujący jak plik *.c jest osobno to program nie działa tzn nie wyświetla mi LCD natomiast jak wsadzę cała zawartość pliku *.c do pliku main.c to działa bez żadnych zarzutów.


    Być może nie rozwiąże to problemu, ale to pierwszy krok, który powinieneś zrobić zamiast pisać:

    Albi1983 napisał:
    Prosiłbym nie krzyczeć na mnie za F_CPU w kodzie.
    Ciągle zapominam to zrobić
REKLAMA