PIC programmering i C
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.
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.
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.
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.
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
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
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.
Ä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.
Finns inget annat sätt.ZigBee skrev:Icecap, det är ju så man ska gå tillväga tycker jag med. Men det är ganska långuppstarttid på det.
Det blir så, om man inte börjar på rätt ställeSå fort man ska göra något nytt så blir det en massa felkoder som tar timtals att hitta orsaken till.
RTFMTills 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.
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.
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.

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.
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.
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.
Detta är en include-satsZigBee skrev: Skriver in detta längst upp,
#include "delay.h"
Fel nummer 1; RTFMMen 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.
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.
Ovanstående fel beror förmodligen på detta.Error [499] ; . undefined symbol:
_DelayMs (ProgramOne.obj)
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

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".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 ?