PIC programmering i C

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ZigBee
Inlägg: 161
Blev medlem: 2 augusti 2006, 04:48:42
Ort: Jönköping

Inlägg av ZigBee »

Tack för råden. Den guiden jag använde var itne så bra för den var anpassad till en annan PIC.

Är det någon som har tutorial för pic16F690 för C programmering så tas det tacksamt emot. Har slösat otaligt många timmar utan att komma nånstans.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Du är ute på fel spår tycker jag!

Att leta efter en tutorial som är så begränsat är inte lönt, du bör istället kolla med databladet VILKA register som ska ställas till VAD och sedan göra detta.

Om det så är C eller ASM eller Pascal eller *ryyyys* BASIC, ska det likaväl göras! Portar ska ställas till in- eller output, UART ska kanske aktiveras osv. och om du gör det i assembler eller C har ingen betydelse, det ska likaväl göras.

Tar vi som exempel att port A ska vara output på alla pinnar blir det i ASM till:
banksel TRISA ; Välj rätt bank
movlw 0xFF ; Värdet
movwf TRISA ; Ska in här för att alla pinnar ska bli output

och i C blir det:
TRISA = 0xFF; // Alla pinnar som output

Så du ska nog dela upp lite:
1: Hur ska kretsens funktioner inställas. Lösning = databladet.
2: Vad ska programmet göra. Lösning = Programmering.
ZigBee
Inlägg: 161
Blev medlem: 2 augusti 2006, 04:48:42
Ort: Jönköping

Inlägg av ZigBee »

Icecap, det är ju så man ska gå tillväga tycker jag med. Men det är ganska långuppstarttid på det.

Så fort man ska göra något nytt så blir det en massa felkoder som tar timtals att hitta orsaken till.

Tills nyligen så fick jag inget att fungera tills jag lade till en "Config rad" längst upp.

Nu så försöker jag implementera Delay.c så jag kan anävnda delay, DelayMs kommandot. Blir massa felkommandon trots att jag typ 3 rader kod.

I vanliga fall utgår jag från färdig kod som man kan bygga på po ändra lite i. Samt kodbibliotek som man kan söka bland. Om man behöver använda en funktion eller ett kommando tex, så kan jag hitta det i ett färdigt program och se hur de har använt det. NU måste jag uppfinna hjulet känns det som.


Slutresultatet ska bli styrning av 2 stegmotor drivare från Moons, MS2035.
Kan man använda PWM för detta?

Har typ kommit till nivån få en LED att lysa efter timtals med felkod fixande.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Blir massa felkommandon ...

Felmeddelanden, kanske ?
Och i så fall, vilka felmeddelanden ?
ZigBee
Inlägg: 161
Blev medlem: 2 augusti 2006, 04:48:42
Ort: Jönköping

Inlägg av ZigBee »

#include <htc.h>

__CONFIG(FCMDIS & IESODIS & BORDIS & UNPROTECT & MCLRDIS & PWRTEN & WDTDIS & INTIO);


//---------------------------------------------------------------------
// Pin Definitions
//---------------------------------------------------------------------


void main()
{

TRISC=0x00;

RC0=1;

}
ZigBee
Inlägg: 161
Blev medlem: 2 augusti 2006, 04:48:42
Ort: Jönköping

Inlägg av ZigBee »

Det här är i princip det enda som funkar, tända en LED på utvecklingsbordet PICKit2, vad jag än gör så antingen gunkar det inte eller så får jag felmeddelanden =)

Vill prova DelayMs subrutinen,

Skriver in detta längst upp,
#include "delay.h"

Men då får jag följande felmeddelande. Har hittat filen delay.c o delay.h och lagt i min projektmapp. Eller de kanske ska ligga någon annan stans.

Error [499] ; . undefined symbol:
_DelayMs (ProgramOne.obj)


ProgramOne namnet på mitt ovanstående patetiska program.


* Edit lade till lite
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Så includen i sig ger inget fel ?

Är [499] ett radnummer eller felkod ?
Om radnummer, vad står på den raden ?
Om felkod, vilket radnummer hänvisar den till ? Och vad finns där ?

Finns "_DelayMs" med i delay.h ?

EDIT: Har du gjort *någoting alls* för att felsöka ???

EDIT2: Just nu är det mest gnäll från din sida, du måste bli mycket mer konkret.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46929
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

ZigBee skrev:Icecap, det är ju så man ska gå tillväga tycker jag med. Men det är ganska långuppstarttid på det.
Finns inget annat sätt.
Så fort man ska göra något nytt så blir det en massa felkoder som tar timtals att hitta orsaken till.
Det blir så, om man inte börjar på rätt ställe
Tills nyligen så fick jag inget att fungera tills jag lade till en "Config rad" längst upp.

Nu så försöker jag implementera Delay.c så jag kan anävnda delay, DelayMs kommandot. Blir massa felkommandon trots att jag typ 3 rader kod.
RTFM :twisted:
I vanliga fall utgår jag från färdig kod som man kan bygga på po ändra lite i. Samt kodbibliotek som man kan söka bland. Om man behöver använda en funktion eller ett kommando tex, så kan jag hitta det i ett färdigt program och se hur de har använt det. NU måste jag uppfinna hjulet känns det som.


Hur skall du kunna ändra på saker om du inte vet hur man gör.

Det finns bara Tre sätt, läs manualen, läs manualen och läs manualen.

De flesta utvecklingsverktygen, ialla fall dem man betalar för kommer med en mängd bibliotekskod, som man kan använda i sina applikationer, dock måste man läsa manualen för att först hur man skall använda dem.
Om du då gör på det riktiga sättet, och läser manualen(erna), behöver du inte uppfinna hjulet på nytt.


C är ett riktigt programspråk, som (åtminstone) i teorin är fullt porterbart, dvs programmet skall kunna kompileras till vilken plattform som helst, utan någon förändring, per definition så finns det altså inga speciella tutar för att använda C i en uC-miljö, som typ PIC/AVR eller vad det nu månde vara.

Att det i verkligheten inte riktigt går att kompilera ett program skrivet för en PC till en PIC är en helt annan sak, då PICen saknar en hel del resurser.
De kompilatorer som är specifika till uC brukar dock inte vara 100% ANSI då vissa grejjor i ANSI C inte fyller någon funktion på en uC, bla MALLOC och liknande rutiner för dynamisk minnes allokering.

Så skall du skriva i C läs K&R's bok, använd den som uppslagsbok, läs de olika IG2C, BG2C mm som finns på nätet, bla brukar det här med pekare ställa till det i början.
Dessutom, som alltid PIC-Databladet är nog det viktigaste som finns tillsammans med manualen för din IDE.
T&E-metoden är i detta fall en mycket långsam och frustrerande metod.

Glöm inte att ALLT i C MÅSTE deklareras och sedan includeras i programmet.
ZigBee
Inlägg: 161
Blev medlem: 2 augusti 2006, 04:48:42
Ort: Jönköping

Inlägg av ZigBee »

Tack för att du tog dig tid Tomas. Jag förstår vinken ;)


Det blir ganska tungrott men jag får köra så. Blir säkert mer tungrott med alla fel som man inte vet vartifrån de härhör om man experimenterar sig fram.

Känns som om jag glömt det mesta när det gäller programmering tyvärr, dessutom har jag aldrig varit så duktig på det.
ZigBee
Inlägg: 161
Blev medlem: 2 augusti 2006, 04:48:42
Ort: Jönköping

Inlägg av ZigBee »

Förresten, vad menar du med allt i C måste deklareras och inkluderas i programmet?
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

ZigBee skrev:Skriver in detta längst upp,
#include "delay.h"

Men då får jag följande felmeddelande.
Du vill nog använda #include <delay.h> istället.
2N2222
Inlägg: 56
Blev medlem: 11 mars 2008, 10:25:56
Ort: Stockholm

Inlägg av 2N2222 »

Man kan ju fuska genom att gå en kurs oxå!
http://www.isk.kth.se/kursinfo/6b4059/kursprogvt07.htm
Anmälan till HT08 senast på fredag via studera.nu (förlängt)

Hmmm... såg att ZigBee bor i Norrköping. Fast allt studiematerial finns ju på länken ovan. Men då missar man iofs Williams utmärkta pedagogik och fikapauser. En kul kurs som dessutom är gratis :)

BTW. Kursen använder den norska C-kompilatorn http://www.bknd.com/cc5x/downl-stud.shtml
vilken är gratis upp till 1024 instruktioner. Räcker faktiskt ganska långt...
Och den är enkel att få att lira.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Du vill nog använda #include <delay.h> istället.

Varför ?
Fanns det något felmeddelande om att delay.h inte hittades ?
Så tolkade i alla fall inte jag det.
Eller kan *fel* delay.h ha inckluderats ?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46929
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

ZigBee skrev: Skriver in detta längst upp,
#include "delay.h"
Detta är en include-sats
Men då får jag följande felmeddelande. Har hittat filen delay.c o delay.h och lagt i min projektmapp. Eller de kanske ska ligga någon annan stans.
Fel nummer 1; RTFM
Du skall INTE flytta några biblioteksfiler, aldrig, om du inte vet exakt vad du gör.

Sökvägarna till dessa ställs antingen i en konfig-dialog (settings) i IDE'n eller så är sökvägarna hårdkodade i biblioteken.
Error [499] ; . undefined symbol:
_DelayMs (ProgramOne.obj)
Ovanstående fel beror förmodligen på detta.

Vad som menas med att allt måste deklarareras och inkluderas, jo det får du reda på om du läser K&R.

Enkelt uttryckt:
Alla funktioner måste deklareras, detta görs normalt i en .h fil som inkluderas via #include i programmet.
Alla globala variabler måste deklareras, se ovan.
Detta gäller även de funktioner och variabler du själv skapar.
Alla lokala variabler måste deklareras i funktionen innan de används.
Om man har ett väldigt litet program med få variabler och få funktioner, så kan man vara lat och göra deklarationen överst på sidan.

Den enda funktion man inte behöver ddeklarera är "void main(void)", den är per automatik redan deklarerad.

För at kunna använda en biblioteksfunktion i ett program, måste du inkludera den relevanta .h-filen innan du försöker anropa koden.
Som jag skrev tidigare, så anges sökvägarna till lib-koden ofta i en dialog-ruta för din kompilator, alternativt är den hårdkodad i .hfilen (RTFM).

En .h fil kan då se ut så här ungefär:

Kod: Markera allt

#ifndef LIB.H                     //för att inte inkludera mer än en gång
#define LIB.H
#include "/rel/path/to/lib.c" //hårdkodad sökväg


void proto1();                   //Funktions prototyp
osv...

char var1                         //Variabeldeklaration
osv
#endif
Gör dig en tjänst, börja läsa, fråga sedan, då förstår du mycket bättre. :wink:
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

sodjan skrev:> Du vill nog använda #include <delay.h> istället.

Varför ?
Fanns det något felmeddelande om att delay.h inte hittades ?
Så tolkade i alla fall inte jag det.
Eller kan *fel* delay.h ha inckluderats ?
Han skrev "Vill prova DelayMs subrutinen", vilket jag tolkar är en lib-funktion till hans kompilator. Att då kopiera header-filen för denna funktion till sitt projektträd är Fult och Felt i C-världen. Man ska låta lib-funktionerna vara och låta kompilatorn själv leta upp dem, genom att använda <delay.h> istället för "delay.h".
Skriv svar