AD-omvandlings problem med pic18
Hur gick det då?
Jo, jag hade centrerat mig på att det var koden som var felaktig och därför fokuserat min felsökning på den. När jag till slut övertygade mig om att den var korrekt (gav till slut upp och körde asm) hårdtestade jag kretsen. Av (med facit i hand) någon dum anledning brukar jag försöka undvika att mäta på kretsens ben när det finns risk för att kortsluta matningsspänning. I detta fall var det fel, åh så fel (jag kan höra Bosse bildoktorns mantra fel fel fel). Anslutningen till AVdd var skadad och ADCn hade då ingen riktig referens.
Mina fortsatta experiment med C18 har lyckats väl och det börjar kännas riktigt bra nu, men på vissa punkter vill jag hävda att den bryter mot C89.
Här är ett exempel på något jag inte riktigt har koll på (men så har jag inte grävt igenom manualen utan gick istället runt):
#include <stdio.h>
#include <string.h>
char str[] = 1234
void main(void)
{
printf(strlen(str) = %d strlen(1234) = %d, strlen(str), strlen(1234));
}
Output:
strlen(str) = 4 strlen(1234) = 0
Jag tackar för hjälpen, en del oklarheter har rätts ut. Kanske kan jag i framtiden hjälpa en stackars vilsen själ med C18, likt mig själv.
God Jul till alla!!
EDIT: typo, ändrade C99 -> C89
Jo, jag hade centrerat mig på att det var koden som var felaktig och därför fokuserat min felsökning på den. När jag till slut övertygade mig om att den var korrekt (gav till slut upp och körde asm) hårdtestade jag kretsen. Av (med facit i hand) någon dum anledning brukar jag försöka undvika att mäta på kretsens ben när det finns risk för att kortsluta matningsspänning. I detta fall var det fel, åh så fel (jag kan höra Bosse bildoktorns mantra fel fel fel). Anslutningen till AVdd var skadad och ADCn hade då ingen riktig referens.
Mina fortsatta experiment med C18 har lyckats väl och det börjar kännas riktigt bra nu, men på vissa punkter vill jag hävda att den bryter mot C89.
Här är ett exempel på något jag inte riktigt har koll på (men så har jag inte grävt igenom manualen utan gick istället runt):
#include <stdio.h>
#include <string.h>
char str[] = 1234
void main(void)
{
printf(strlen(str) = %d strlen(1234) = %d, strlen(str), strlen(1234));
}
Output:
strlen(str) = 4 strlen(1234) = 0
Jag tackar för hjälpen, en del oklarheter har rätts ut. Kanske kan jag i framtiden hjälpa en stackars vilsen själ med C18, likt mig själv.

God Jul till alla!!
EDIT: typo, ändrade C99 -> C89
Senast redigerad av rävekorre 20 december 2005, 22:43:38, redigerad totalt 1 gång.
> men på vissa punkter vill jag hävda att den bryter mot C99...
Kan du peka på stället där det står att den skulle följa C99 ?
Om inte, så vet jag inte riktigt vad din poäng är...
Det enda jag har hittat är "ANSI '89 compatibility", vad nu det betyder.
Generellt sätt betyder dessa standards ganska lite i en mikrokontroller
miljö.
Kan du peka på stället där det står att den skulle följa C99 ?
Om inte, så vet jag inte riktigt vad din poäng är...
Det enda jag har hittat är "ANSI '89 compatibility", vad nu det betyder.
Generellt sätt betyder dessa standards ganska lite i en mikrokontroller
miljö.
C89 menar jag, C99 är den "nyare" standarden.
Bool och complex är väl två exempel på nymodigheter i C99 som kanske saknas i C89?
"Code is written using standard ANSI C notation." Det tolkar jag com C89 annars borde det refererats till C99. Jag stötte på lite problem med variabelkonverteringar. Nu finns det lite info om hur man kan göra så att C18 följer C89 striktare.
Nu nämnde jag bara det som en nackdel jag personligen upplevt, annars har jag mycket goda erfarenheter av C18, jag rekommenderar det starkt.
Bool och complex är väl två exempel på nymodigheter i C99 som kanske saknas i C89?
"Code is written using standard ANSI C notation." Det tolkar jag com C89 annars borde det refererats till C99. Jag stötte på lite problem med variabelkonverteringar. Nu finns det lite info om hur man kan göra så att C18 följer C89 striktare.
Nu nämnde jag bara det som en nackdel jag personligen upplevt, annars har jag mycket goda erfarenheter av C18, jag rekommenderar det starkt.