Modelspoormagazine forum

Modelspoor, praktijk => Modelspoor-elektronica met microcontrollers => Topic gestart door: conducteur op 10 juni 2013, 19:56:58 PM

Titel: C-experten gezocht!
Bericht door: conducteur op 10 juni 2013, 19:56:58 PM



/***************************************************************************
*    HITECH C for PIC Program A_02- 08/11/2010                                                          *
*      Processor:     PIC16F887                                                                                    *
*      Compiler:      HI-TECH C PRO v9.65PL1 Lite                     *
•   Discription:  led aan poort C   *
•   PIN Assignments:   led aan C                                            *
**************************************************************************/




#include <16f887.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;
__CONFIG(HS & WDTDIS & LVPDIS)
#IRCF=0X07.


void main()
{
       
     
   
   for (;
   {TRISC=0x00;
      PORTC=0x37;
           
}}

Kan iemand verklaren waarom dit simpele programma om mijn programmer en demobordje te testen problemen geeft in de compiler?





Build E:\Users\Eigenaar\Desktop\mplab testen\knipperlicht for device 16F887
Using driver C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin\picc.exe


Make: The target "E:\Users\Eigenaar\Desktop\mplab testen\pag_1_17.p1" is up to date.
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin\picc.exe" -oknipperlicht.cof -mknipperlicht.map --summary=default,-psect,-class,+mem,-hex --output=default,-inhx032 pag_1_17.p1 --chip=16F887 -P --runtime=default,+clear,+init,-keep,+osccal,-download,-resetbits,-stackcall,+clib --opt=default,+asm,-debug,-speed,+space,9 --warn=0 -D__DEBUG=1 --double=24 --float=24 --addrqual=ignore -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.83
Copyright (C) 2011 Microchip Technology Inc.
Licensed for evaluation purposes only.
This licence will expire on Mon, 22 Jul 2013.
Error   [800] C:\Users\....\pag_1_17.c; 13. undefined symbol "LVPDIS"
Error   [800] C:\Users\.....\pag_1_17.c; 13. undefined symbol "WDTDIS"
Error   [800] C:\Users\......\pag_1_17.c; 13. undefined symbol "HS"


********** Build failed! **********
Titel: Re: C-experten gezocht!
Bericht door: eve op 10 juni 2013, 20:25:34 PM
Er mankeert een haakje    )    zo ver ik kan zien...

Erik
Titel: Re: C-experten gezocht!
Bericht door: Havoc op 10 juni 2013, 20:35:07 PM
Geen expert en zeker niet in hitec en microcontrollers.

Alles wat begint met /* en loopt tot */ is commentaar. Dus de hele eerste blok is niks voor de compiler.

Dan is er #include <16f887.h> Dat wil zeggen steek de file 16f887.h volledig in deze file en op deze plaats. Omdat je <> gebruikt hebt gaat de compiler die file zoeken in je path dat je opgegeven hebt met de /I compiler optie. Als die er niet is wat je voor je OS als INCLUDE path hebt opgegeven. Bekijk die file eens

Een .h file is een header file en bevat normaal gezien enkel variabele definities (welk type is het) en functie prototypes (welke argumenten neemt een functie en welk type geeft ze terug). Soms met wat commentaar erbij.

De lijn met // wil zeggen dat het commentaar is tot het einde van de lijn.

Komen we aan __CONFIG(HS & WDTDIS & LVPDIS) Dit is geen C, maar een instructie voor de PIC assembler. Hoe je dat moet gebruiken daar heeft Microchip wel documenten over. http://www.google.com/url?sa=t&rct=j&q=__CONFIG&source=web&cd=2&ved=0CDIQFjAB&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2FPIC%2520Config%2520bit%2520Format_Syntax_AndDefinitions.pdf&ei=axe2UbW0LO-Z0QXin4CQBg&usg=AFQjCNGDWK-bpE7450aw3oiTWP-kOT7bpw (http://www.google.com/url?sa=t&rct=j&q=__CONFIG&source=web&cd=2&ved=0CDIQFjAB&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2FPIC%2520Config%2520bit%2520Format_Syntax_AndDefinitions.pdf&ei=axe2UbW0LO-Z0QXin4CQBg&usg=AFQjCNGDWK-bpE7450aw3oiTWP-kOT7bpw)

Dan komen we aan je "void main()". Dat is het entrypunt van je programma.

Dan heb je iets dat niet klopt: for(;{TRISC=0x00;PORTC=0x37;} (de laaste } is het einde van je "main" functie) Een for statement is van de vorm

for(startvoorwaarde;doe bij iedere iteratie;eindvoorwaarde)

En dat heb je niet! Je hebt geen beginvoorwaarde, dat is geen probleem. Dan doe je {TRISC=0x00;PORTC=0x37;} Op zich ook geen probleem. Maar er is geen eindvoorwaarde. Die moet er niet zijn (je hebt dan een oneindige lus) maar dan moet je een "lege" instructie hebben en je for statement moet afsluiten met ")". En daarna moet een ; komen.

De error die de compiler geeft is gewoon dat hij symbolen tegenkomt die nog niet gedefinieert zijn. Je moet eerst de compiler uitleggen wat voor type LVPDIS, WDTDIS en HS zijn en welke waarde ze hebben.

Je gaat dan bvb zoiets moeten doen:
_CP_ON     EQU   H'000F'
_CP_OFF    EQU   H'3FFF'
_PWRTE_ON  EQU   H'3FF7'
_PWRTE_OFF EQU   H'3FFF'
_WDT_ON    EQU   H'3FFF'
_WDT_OFF   EQU   H'3FFB'
_LP_OSC    EQU   H'3FFC'
_Xt_OSC    EQU   H'3FFD'
_HS_OSC    EQU   H'3FFE'
_RC_OSC    EQU   H'3FFF'


Gepikt op http://www.sq-1.com/config.html (http://www.sq-1.com/config.html) Maar dan aangepast aan jouw controller uiteraard. Vandaar ook de '&' operator. Je beschrijft welke bits voor elke functie welke waarde moeten krijgen en dan stel je de eindwaarde samen door een logische and. Lees die link eens, daar staat ook dat je een "list" directive moet hebben en welke file je moet includen omdat jouw compiler er iets van zou snappen.
Titel: Re: C-experten gezocht!
Bericht door: PeterC op 10 juni 2013, 20:45:14 PM
Even op mijn PC gekeken en wat blijkt: bij de installatie van MPLab IDE heb ik de volledige installatie uitgevoerd en HI-TECH C staat er ook op!

Een vlugge blik:
#include <16f887.h> moet #include <pic16f877.h> worden (zie: "C:\Program Files\HI-TECH Software\PICC\9.83\include\"


void main(void)
{
}


is je hoofdprogramma.  Voer je initialisaties uit voor je forever loop en schrijf je accolades mooi onder elkaar:


void main(void)
{
  TRISC=0x00;
  PORTC=0x37;
  for (;;)
  {
  }
}


Je lus doet niets en dus je programma ook niet.  Probeer dit al door de compiler te krijgen voor je verder gaat.

Titel: Re: C-experten gezocht!
Bericht door: Geert op 11 juni 2013, 08:13:45 AM
Heb je in MPLAB de juiste PIC ingesteld?

als je dat gedaan hebt, dan kan je #include <16F887.h> vervangen door #include <htc.h>

zet ook eens een puntcomma achter de __CONFIG lijn

de rest is al aangehaald door andere posters...

Geert
Titel: Re: C-experten gezocht!
Bericht door: conducteur op 11 juni 2013, 13:27:02 PM

/**************************************************************************
*    HITECH C for PIC Program A_02- 08/11/2010                                                                      *
*      Processor:     PIC16F887                                                                                                  *
*      Compiler:      HI-TECH C PRO v9.65PL1 Lite                                                                        *
*   Discription:  led aan poort C                                                                                              *
*   PIN Assignments:   led aan C                                                                                               *
***************************************************************************/


#include <htc.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;
__CONFIG(HS & WDTDIS & LVPDIS);




void main()
{
       
     
   
   for (;
   {TRISC=0x00;
      PORTC=0x37;
           
}
}





Dit geeft nog altijd problemen in de config code lijn... Ik begrijp niet dat zoiets kinderlijk eenvoudig verkeerd kan lopen?
Juiste PIC is ingesteld in MPlab? 16f887?



Titel: Re: C-experten gezocht!
Bericht door: eve op 11 juni 2013, 14:15:50 PM
Voor de tweede keer :

The syntax for a for loop is

for ( variable initialization; condition; variable update ) {
  Code to execute while the condition is true
}


Die 5 € transportkosten voor een komplete doos C-boeken-materiaal die ik u voorstelde, waren precies toch geen slecht voorstel...

Erik
Titel: Re: C-experten gezocht!
Bericht door: conducteur op 11 juni 2013, 14:18:11 PM
/* **************************************************************************
*    HITECH C for PIC program A_01- 08/11/2010                   *
•   Author:        Vermeulen D      *
****************************************************************************
*      Processor:     PIC16F877(A)                                                *
*      Compiler:      HI-TECH C PRO v9.65PL1 Lite                     *
•   Files required:     none         *
•   Discription: light up led0 of port C      *
•   PIN Assignments:    led at C0                                               *
************************************************************************* */
#include <htc.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled
__CONFIG(HS & WDTDIS & LVPDIS);


void main()
{
    TRISC = 0x00;       // configure POORT C als output
    PORTC = 0b00000001;          // Pin C0 hoog


    for (; {                 // loop forever
       
    }
}



Dit komt uit de cursus elektronica en is het allereerste voorbeeldprogramma dat we gezien hebben. Op school hebben we dat getest en daar heeft dat gewerkt zonder problemen. Hier heb ik me op gebaseerd voor mijn programmertest.
(over welke boeken heb je het? Mail me!)
Titel: Re: C-experten gezocht!
Bericht door: Geert op 11 juni 2013, 14:50:39 PM
void main()
{
    TRISC = 0b00000000;
     PORTC = 0b00000001;

     for ( ; ; ) {
                 ;
      }
}

het bovenstaande zal zo moeten werken, hoe dat zit met die CONFIG ERROR 800 zie ik niet direct ?

Deze omschrijving staat er in de HI-TECH C manual:

800) undefined symbol "*"  The named symbol is not defined in this module, and has not been specified GLOBAL.


Mogelijk kan de compiler 16f887.h  of  htc.h niet vinden?

Mogelijk moet de juiste map geselecteerd worden waar deze staan?


EDIT: net gezien dat Peter(C) het main program ook al had voorgesteld  8)

Geert
Titel: Re: C-experten gezocht!
Bericht door: conducteur op 11 juni 2013, 14:55:15 PM
zolang deze lijn in de code staat krijg ik hem niet door de compiler, compiler herinstalleren?

// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;
__CONFIG(HS & WDTDIS & LVPDIS);
Titel: Re: C-experten gezocht!
Bericht door: Geert op 11 juni 2013, 14:59:24 PM
her installeren zal ik niet doen, gewoon verder zoeken, het zal wel iets stom zijn zoals gewoonlijk  ;)

Geert
Titel: Re: C-experten gezocht!
Bericht door: conducteur op 11 juni 2013, 15:10:18 PM
Dat is net het vreemde,
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;__CONFIG(HS & WDTDIS & LVPDIS);

heb ik uit de voorbeeldprogramma's van de cursus gekopieerd, waarvan ik weet dat ze hebben gewerkt op school. Koppige microcontrollers/programmeertaal. :(
Titel: Re: C-experten gezocht!
Bericht door: eve op 11 juni 2013, 15:16:41 PM
In vele voorbeeldprogramma's zitten fouten, bewust of onbewust, zelfs drukfouten buiten de wil van de auteur om.

Een for-opdracht is  for ( ; ; )

Het laatste  ) -haakje zie ik niet staan in uw voorbeeld.

Erik

Boeken : zoek ik terug op.
Titel: Re: C-experten gezocht!
Bericht door: conducteur op 11 juni 2013, 15:21:55 PM
puntkomma haakje vormt ;) en die smiley wordt in code niet weergegeven. Daarom mankeert ie hier op het forum, maar in de code staat het juist. En ik denk niet dat dat het probleem is, daarvoor krijg ik geen errors of warnings.


De voorbeeldprogramma's komen uit de cursus elektronica van op school en hebben we effectief getest en daar zaten geen fouten in.
Titel: Re: C-experten gezocht!
Bericht door: eve op 11 juni 2013, 17:21:17 PM
OK

Erik
Titel: Re: C-experten gezocht!
Bericht door: Geert op 11 juni 2013, 17:44:35 PM
Citaat van: conducteur op 11 juni 2013, 15:21:55 PM


De voorbeeldprogramma's komen uit de cursus elektronica van op school en hebben we effectief getest en daar zaten geen fouten in.

Daarom denk ik dat het iets is met de instellingen van MPLAB?

Je topic naam is bewust goed gekozen... Je hebt echt een expert nodig, en dat ben ik niet  :(

Geert
Titel: Re: C-experten gezocht!
Bericht door: conducteur op 11 juni 2013, 21:07:17 PM
experten genoeg bij elkaar, dus door hen is mijn probleem nu min of meer opgelost.
http://www.circuitsonline.net/forum/view/message/1516583#1516583 (http://www.circuitsonline.net/forum/view/message/1516583#1516583)
Titel: Re: C-experten gezocht!
Bericht door: Geert op 11 juni 2013, 21:28:44 PM
Das wel straf dat de C-compiler na drie jaar belangrijke afkortingen wijzigt. Dus mijn oude code kan ik niet meer compileren op de nieuwste versie van MPLAB, goe dat ik dat weet ...   Of kan de versie ergens ingesteld worden ?


Geert
Titel: Re: C-experten gezocht!
Bericht door: Havoc op 11 juni 2013, 21:31:58 PM
Kan zijn dat je compiler de include files niet vindt. Vervang eens <pic16F877.h> door het volledige pad waar die file staat dus <c:\etcetc\pic16f887.h> Het kan zijn dat je paths niet goed ingesteld staan.

Bij windows moet je naar "my computer" gaan, rechts klikken, "properties", dan "advanced..." en dan "environment variables". Vergelijk eens wat je op school hebt met wat jij hebt. volgens mij ga je daar iets verschillend vinden.

Waar staat bij jou trouwens die pic16f887.h file? Kan je ook de inhoud van je make file eens posten?
Titel: Re: C-experten gezocht!
Bericht door: Sattrickske op 11 juni 2013, 22:02:06 PM
Je CONFIG directieven voor de 16F877 zijn verkeerd.  Voor de 16F877 moet het zijn:

__CONFIG(FOSC_HS & WDTE_OFF & LVP_OFF);


Da's het rotte aan de PICs, er zitten veel verschillen op de defines per type µC, maar ik heb er een truucje voor.  Ga op zoek waar je de HI-TECH compiler hebt geïnstalleerd en ga een eens kijken in de include directory (op mijn PC: D:\Program Files (x86)\HI-TECH Software\PICC\9.83\include).  Je zal daar een pak .h bestanden terugvinden waaronder eentje pic16f877.h, deze bevat alle info die je nodig hebt...
Titel: Re: C-experten gezocht!
Bericht door: conducteur op 11 juni 2013, 23:07:49 PM
Haha missie al voor 80% geslaagd, de bedoeling van dit eenvoudige programma was om m'n pickit2 eens te testen door wat met de ledjes te spelen die op het bijgeleverde demobordje zitten.


-->na het programmeren gaan de ledjes heel even aan, maar zoeken waarom ze niet aanblijven zal voor morgen zijn.
Titel: Re: C-experten gezocht!
Bericht door: Steam.N op 11 juni 2013, 23:53:42 PM
Prachtig, Rian !
De eerste horde is gezet.
De rest is gewoon programmeerwerk, met wat logisch nadenken.

De hardware onder controle krijgen is soms een harde knobbel, maar zover ben je al !  Tof.
Titel: Re: C-experten gezocht!
Bericht door: Sattrickske op 12 juni 2013, 19:23:00 PM
Citaat van: conducteur op 11 juni 2013, 23:07:49 PM
-->na het programmeren gaan de ledjes heel even aan, maar zoeken waarom ze niet aanblijven zal voor morgen zijn.
Zorg dat je de watchdog disabled in het config register.
Titel: Re: C-experten gezocht!
Bericht door: froelants op 22 juli 2013, 22:30:20 PM
Beste,

Je probleem is misschien al opgelost, maar ik zag je vraag nu maar pas.
Probeer eens het volgende:

#include <16f887.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;
__CONFIG(HS & WDTDIS & LVPDIS)
#IRCF=0X07.

void main()
{
   for (;TRISC=0x00;PORTC=0x37);
}

Ik heb de lus "gerepareerd", de lus bestaat uit 3 delen die van elkaar gescheiden zijn met een komma-punt. Het eerste deel is de initialisatie deze code wordt één maal uitgevoerd bij de start van de lus, maar die heb je niet dus komt na het open rond haakje een komma-punt. Het tweede deel is de test waarin bepaald wordt of de lus nog een keer moet worden uitgevoerd, dit is hier TRISC=0x00. Het derde deel wordt telkens op het einde van de lus uitgevoerd en dat is hier het bevel PORTC=0x37. Doordat de volledige lus opgenomen is in het for statement moet dit worden afgesloten met een komma-punt.
mvg,
Frank