Jag har hållit på med PIC-programmering i snart ett år, använder MPLAB och HI-TECH C.
Hårdvaran utgörs av en PIC16F887, en hex-strömställare och en 2x16 LCD.
Jag har haft följande problem med anslutning av Hex-kodade strömställare med både 16-läges vridströmställare och 9-läges tumhjuls.
Koden populerar en variabel med värdet av en PORT i mitt fall PORTC. den läser av en BIT i taget och resultatet blir en fyra-bitars representation av strömställarens värde.
Kod: Markera allt
int read_hex_switch()
{
PORTC = 0x00; // Clear PORTC
TRISC = 0x0f; // Set PORTC 0-3 to Input
int position = 0;
position = RC0;
position |= RC1 << 1;
position |= RC2 << 2;
position |= RC3 << 3;
//position ^= 0x0f; om In Low uncomment this to reverse bits.
return position;
}
Kod: Markera allt
void main(void)
{
ANSEL = 0; // No analogue pins
ANSELH = 0;
lcd_init();
while(1)
{
char buf[16];
lcd_clear();
lcd_goto(0);
lcd_puts("9 state hex sw.");
lcd_goto(0x40);
lcd_puts("Pos: ");
int hex_pos;
for(;;)
{
DelayMs(100);
lcd_goto(0x45);
hex_pos = read_hex_switch();
sprintf(buf,"%2d",hex_pos);
lcd_puts(buf);
}
}
}
PIC:en läser av rätt värde, men bara intermittent! Värdet skrivs ut på LCD:n och sedan växlar den värde "slumpmässigt"!
Har jag ställt vredet på 4 visar den t.ex.: 4...11...15...12...4...8...15...4...
Har jag ställt vredet på 7 visar den t.ex.: 11...7...15...7...12...9...7...15...
Det verkar alltså, som om den läser av rätt värde men bara ibland?
Är detta sannolikt ett elektriskt eller ett programmatiskt fel?
Har haft liknande fel med en enklare applikation, en PIC som, genom att blinka en LED, simulerar fyrkaraktärer som man väljer med ett 16-läges vred. Felet då var att den verkade tycka att en av PIN-arna var låg (i IN LOW) dvs "1". och bytte fyrkaraktär på eget bevåg. Kretsen verkade vara mycket känslig för störningar, det räckte att jag andades på kretsen för att den skulle bete sig underligt... eller rörde handen ca 10-15 cm från kretskortet??
Koden fungerar felfritt vid simulering!
Video finns på
(Lite dålig videokvalitet)
Detta är mycket frustrerande, hjälp tas tacksamt emot!
Mvh,
Gustaf