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

PIC24HJ32GP202 +LCD problem z kompilacja; brak adcDrv1.h

tomb_fish 06 Kwi 2008 18:53 2084 9
REKLAMA
  • #1 5000623
    tomb_fish
    Poziom 10  
    Posty: 54
    Ocena: 6
    Witam,

    Ostatnio dostalem 16 bitowy 29-pinowy "starter development board" + (LCD-Powertip PC1602-H, zamontowany do tej plytki) + program(3 pliki .c i 4 .h) ktory ma wystietlic string na tym wyswietlaczu.
    Zainstalowalem kompilator MPLAB30 + IDE Stowrzylem nowy projekt i dodalem pliki do projektu. Przy kompilacji programu kompilator wypisuje mi duzo bledow. Brak pliku adcDrv1.h i tglPin.h, pliki znalazlem na wyszukiwarce goole, Ale program dalej sie nie kompiluje...
    Co to sa za pliki ?

    bledy kompilatora i zdjecie ukladu zamieszczam ponizej.

    Make: The target "D:\develop\projects\PIC\tutorial\lcd\adcDrv1.o" is out of date.
    Executing: "D:\develop\platforms\PIC\MPLAB C30\bin\pic30-gcc.exe" -mcpu=24HJ32GP202 -x c -c   "D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c" -o"adcDrv1.o" -g -Wall
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:55:21: error: adcDrv1.h: No such file or directory
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:57:20: error: tglPin.h: No such file or directory
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c: In function 'initAdc1':
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:71: error: 'AD1CON1BITS' has no member named 'ADDMABM'
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:83: error: 'AD1CON4' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:83: error: (Each undeclared identifier is reported only once
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:83: error: for each function it appears in.)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:95: error: 'AD1PCFGH' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:99: error: 'AD1CSSH' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:106: warning: implicit declaration of function 'tglPinInit'
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c: In function 'initTmr3':
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:122: error: 'SAMPPRD' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c: In function 'initDma0':
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:143: error: 'DMA0CON' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:144: error: 'DMA0PAD' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:145: error: 'DMA0CNT' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:146: error: 'DMA0STA' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:147: error: 'DMA0STB' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:148: error: 'DMA0CONbits' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:149: error: 'DMA0REQ' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:152: error: 'IFS0BITS' has no member named 'DMA0IF'
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:153: error: 'IEC0BITS' has no member named 'DMA0IE'
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c: In function '_DMA0Interrupt':
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:173: error: '_DMA_BASE' undeclared (first use in this function)
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:186: warning: implicit declaration of function 'tglPin'
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:187: error: 'IFS0BITS' has no member named 'DMA0IF'
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c: At top level:
    D:\develop\projects\PIC\tutorial\lcd1\adcDrv1.c:188: warning: Invalid interrupt vector names for device '24HJ32GP202' are:
       	_DMA0Interrupt
    
    Halting build on first failure as requested.
    BUILD FAILED: Sun Apr 06 17:06:36 2008


    Pozdr,
    Tomek
    Załączniki:
    • PIC24HJ32GP202 +LCD problem z kompilacja; brak adcDrv1.h 06042008(003).jpg (180.1 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #3 5001289
    tomb_fish
    Poziom 10  
    Posty: 54
    Ocena: 6
    Zgadza sie! Jakis dziwny jest ten MPLAB IDE v 8.0. Utworzylem nowy projekt jeszcze raz i dodalem wszystkie pliki do projektu razem z tymi brakujacymi. Teraz pliki naglowkowe sa widzialne przez kompilator. (Wczesniej tylko dodalem do istniejacego projektu te 2 pliki i nie byly widzialne).

    Mimo ze pliki .h sa widzialne to kompilator wciaz wyrzuca bledy, ze brakuje kilku deklaracji:
    Executing: "D:\develop\platforms\PIC\MPLAB C30\bin\pic30-gcc.exe" -mcpu=24HJ32GP202 -x c -c   "adcDrv1.c" -o"adcDrv1.o" -g -Wall
    adcDrv1.c: In function 'initAdc1':
    adcDrv1.c:71: error: 'AD1CON1BITS' has no member named 'ADDMABM'
    adcDrv1.c:83: error: 'AD1CON4' undeclared (first use in this function)
    adcDrv1.c:83: error: (Each undeclared identifier is reported only once
    adcDrv1.c:83: error: for each function it appears in.)
    adcDrv1.c:95: error: 'AD1PCFGH' undeclared (first use in this function)
    adcDrv1.c:99: error: 'AD1CSSH' undeclared (first use in this function)
    adcDrv1.c: In function 'initDma0':
    adcDrv1.c:143: error: 'DMA0CON' undeclared (first use in this function)
    adcDrv1.c:144: error: 'DMA0PAD' undeclared (first use in this function)
    adcDrv1.c:145: error: 'DMA0CNT' undeclared (first use in this function)
    adcDrv1.c:146: error: 'DMA0STA' undeclared (first use in this function)
    adcDrv1.c:147: error: 'DMA0STB' undeclared (first use in this function)
    adcDrv1.c:148: error: 'DMA0CONbits' undeclared (first use in this function)
    adcDrv1.c:149: error: 'DMA0REQ' undeclared (first use in this function)
    adcDrv1.c:152: error: 'IFS0BITS' has no member named 'DMA0IF'
    adcDrv1.c:153: error: 'IEC0BITS' has no member named 'DMA0IE'
    adcDrv1.c: In function '_DMA0Interrupt':
    adcDrv1.c:173: error: '_DMA_BASE' undeclared (first use in this function)
    adcDrv1.c:187: error: 'IFS0BITS' has no member named 'DMA0IF'
    adcDrv1.c: At top level:
    adcDrv1.c:188: warning: Invalid interrupt vector names for device '24HJ32GP202' are:
       	_DMA0Interrupt
    	_DMA0Interrupt
    Halting build on first failure as requested.
    BUILD FAILED: Sun Apr 06 20:33:49 2008
    


    Co zrobic zeby pozbyc sie tych bledow kompilatora? Najszybciej byloby zakomentowac to co nie dziala.
    Czy moge zakomentowac linijki gdzie w adcDrv1.c gdzie kompilator wyrzuca blad? Zalezy mi tylko na tym zeby PIC wyswietlil cos na LCD?
    Czy to bedzie dzialac?
    Jezeli nie, to jaka jest inna opcja?

    Te linijki m.in. wyrzuca kompilator:
    
    AD1CON1bits.ADDMABM=1; 		// DMA buffers are built in conversion order mode
    AD1CON4=0;					// Allocate 1 words of buffer to each analog input
    									// This register is not used in conversion order mode
    									// This is required only in the scatter/gather mode
    


    Zalaczam plik adcDrv1.h iadcDrv1.c

    Pozdr,
    Tomek
    Załączniki:
    • adcDrv1.h (2.85 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • adcDrv1.c (7.49 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #4 5001860
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    bledy wynikaja z tego, ze do danego pliku z kodem nie jest dolaczony plik naglowkowy procesora. w twoim przypadku:
    #include <p24hj32gp202.h>

    [EDIT]

    MPLAB nie jest dziwny - jest to najzyklejszy port najzwyklejszego gcc. moze to po prostu nie procesor dla ciebie.

    [EDIT]: poprawka - blad nieprawidlowych przerwan wynika z tego, ze twoj procesor nie ma DMA, a kod z niego korzysta - wziales pliki dla innego procka.

    0x41 0x56 0x45!!
  • #5 5002242
    tomb_fish
    Poziom 10  
    Posty: 54
    Ocena: 6
    Zgadza sie, wyrzucilem plik z projektow i zdecydowanie mniej bledow wyrzuca kompilator.

    Co do programowania PICow to nie mam zadnego doswiadczenia, a jestem teraz w posiadaniu tylko tego procka. Wiem ze trudno uczyc sie na takim procku, Ale od czegos trzeba zaczac;-

    Dzieki za pomoc! +10pkt
    Pozdr,
    Tomek
  • REKLAMA
  • #6 5002258
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    trzeba walczyc - procki wbrew pozorom sa dosyc proste (w stosunku do swoich mozliwosci). poszukaj na necie ksiazki 'Learning to fly PIC24' - na przyklad na rapidshare. bardzo dobra ksiazka o tych ukladach i tym wlasnie srodowisku. pozatym datasheet w dlon i PIC jest twoj [;

    0x41 0x56 0x45!!
  • REKLAMA
  • #7 5002282
    tomb_fish
    Poziom 10  
    Posty: 54
    Ocena: 6
    Mam jeszcze jedno pytanie,

    Chce zmierzyc czas miedzy pikami, czas t zaznaczylem na czerwono na obrazku ponizej. Czas ten bedzie sie zmienial od wartosci 10microsekund do 300 microsekund.
    Jaki jest algorytm takiego pomiaru? Jak to pomierzyc? Co wykorzystac?


    Czy sa jakies przyklady pomiarow takich czasow zrobione na PIC?

    Zaznaczam ze jestm poczatkujacym w programowaniu prockow.

    Pozdr,
    Tomek
    Załączniki:
    • PIC24HJ32GP202 +LCD problem z kompilacja; brak adcDrv1.h osc1.jpg (19.42 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #8 5002347
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    Na dole ekranu masz podaną podstawę czasu (s/ms/us/ns) i ta podstawa to jest jedna kratka u ciebie. Liczysz od pik'a do pik'a czyli u ciebie 3 kratki. Mnożysz ilość kratek przez podstawę czasu i masz czas "t" który Cie interesuje. Ewentualnie musisz markery sobie ustawić na jednym i na drugim pik'u i wtedy oscyloskop sam ci wyliczy jaki jest czas między markerami (jeżeli są uaktywnione te od mierzenia czasu, jeżeli od napięcia to ci poda różnicę napięć między markerami).
  • Pomocny post
    #9 5002642
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    taaakk... w temacie o PICu koles na pewno pytal jak to zrobic oscyloskopem...

    anyway: poczytaj w dokumentacji o input capture - jest to uklad stworzony do tego wlasnie celu. daje ci on przerwania. dodatkowo w rozdziale Family Reference Manual poswieconym temu wlasnie ukladowi masz przyklad mierzenia okresu przebiegu:

    Cytat:

    12.5.1 Code Example for Period Measurement
    The following code example shows the time period measurement using the Input Capture
    module. Figure 12-5 illustrates the capture event is generated on every rising edge and the
    capture interrupt is generated after taking two time stamps for period measurement.
    Example 12-1: Capture Code Example
    
    // Initialize Capture Module
    IC1CONbits.ICM= 0b00; // Disable Input Capture 1 module
    IC1CONbits.ICTMR= 1; // Select Timer2 as the IC1 Time base
    IC1CONbits.ICI= 0b00; // Interrupt on every second capture event
    IC1CONbits.ICM= 0b001; // Generate capture event on every Rising edge
    // Enable Capture Interrupt And Timer2
    IPC0bits.IC1IP = 1; // Setup IC1 interrupt priority level
    IFS0bits.IC1IF = 0; // Clear IC1 Interrupt Status Flag
    IEC0bits.IC1IE = 1; // Enable IC1 interrupt
    // Capture Interrupt Service Routine
    unsigned int timePeriod= 0;
    void __attribute__((__interrupt__)) _IC1Interrupt(void)
    {
    unsigned int t1,t2;
    t2=IC1BUF;
    t1=IC1BUF;
    IFS0bits.IC1IF=0;
    if(t2>t1)
    timePeriod = t2-t1;
    else
    timePeriod = (PR2 - t1) + t2
    }
    



    polecam ci sciagniecie calej dokumentacji (czyli Family Reference Manuala + datasheet do tego), bo bez tego ani rusz. jest tam pelno przykladow wykorzystania peryferiow.

    0x41 0x56 0x45!!
  • #10 5005499
    tomb_fish
    Poziom 10  
    Posty: 54
    Ocena: 6
    Do kolegi Snow: LOL, nie taki pomiar czasu mialem na mysli. Dzieki za chec pomocy:-

    Do kolegi Freddie Chopin:

    Bardzo dobra ksiazka! Mam jeszcze przed soba "Embedded C Programming and the Microchip PIC". Ale ta, ktora podales jest o wiele lepsza! Dzieki za wskazowki, juz wiem jak sie zabrac za pomiar tego czasu!

    Pozdr,
    Tomek

Podsumowanie tematu

✨ Problem dotyczył kompilacji programu dla mikrokontrolera PIC24HJ32GP202 z wyświetlaczem LCD PC1602-H, gdzie brakowało plików nagłówkowych adcDrv1.h i tglPin.h. Przyczyną błędów było niepoprawne dołączenie plików do projektu oraz użycie kodu źródłowego przeznaczonego dla innego modelu procesora, który posiadał funkcje (np. DMA) nieobecne w PIC24HJ32GP202. Rozwiązaniem było utworzenie nowego projektu w MPLAB IDE 8.0 i dodanie wszystkich plików, w tym właściwego pliku nagłówkowego procesora p24hj32gp202.h. Wskazano, że MPLAB C30 to port GCC i należy korzystać z dokumentacji (datasheet i Family Reference Manual) oraz przykładów, aby prawidłowo wykorzystać peryferia, takie jak ADC i pomiar czasu. W dyskusji pojawiła się także porada dotycząca pomiaru czasu między impulsami za pomocą modułu input capture, który generuje przerwania i umożliwia dokładne pomiary okresów sygnałów. Polecono literaturę „Learning to fly PIC24” jako pomocną dla początkujących programistów PIC24.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA