Vindmätare. Programmering mikroC.
> Okej då hade jag uppfattat fel i alla fall
Om du *läser* under Lcd_Cmd i MikroC manualen så står det i klartext :
"Requires : Port with LCD must be initialized. See Lcd_Config or Lcd_Init"
> Om man inte ska använda Lcd_Custom_Config eller liknande?
Varför inte ???
Om du inte gör det så lär inte de andra LCD_xxx() funktionerna fungera heller.
Vilken ju manualen är tydlig om.
Dina alternativ är att antingen köra de inbyggda funktionerna, eller att
köra helt utan dom. Du kan nog inte blanda...
Felet du hade gjort tidigare var att försöka köra Lcd_Config med
parametrar för Lcd_Custom_Config. Men det skrev jag ju...
Om du *läser* under Lcd_Cmd i MikroC manualen så står det i klartext :
"Requires : Port with LCD must be initialized. See Lcd_Config or Lcd_Init"
> Om man inte ska använda Lcd_Custom_Config eller liknande?
Varför inte ???
Om du inte gör det så lär inte de andra LCD_xxx() funktionerna fungera heller.
Vilken ju manualen är tydlig om.
Dina alternativ är att antingen köra de inbyggda funktionerna, eller att
köra helt utan dom. Du kan nog inte blanda...
Felet du hade gjort tidigare var att försöka köra Lcd_Config med
parametrar för Lcd_Custom_Config. Men det skrev jag ju...
När jag läser i manualen står det såhär:
void Lcd_Custom_Config(char * data_port, char db3, char db2, char db1, char db0, char * ctrl_port, char rs, char ctrl_rw, char enable);
och då vill jag ha databitarna på RB 4-7 och sedan rs på RC2 och E på RC3.
R/W ska enligt manualen vara kopplad til GND så därför ska man väl inte skriva något där? Men det verkar som om funktionen måste ha tre parametrar på ctrl_port? Så vad ska man skriva där?
Lcd_Custom_Config(&PORTB,7,6,5,4,&PORTC,2,"Vad ska jag då skriva här",3);
Tack för era svar. Har vart till mycket hjälp trots att jag kanske är lite trög
void Lcd_Custom_Config(char * data_port, char db3, char db2, char db1, char db0, char * ctrl_port, char rs, char ctrl_rw, char enable);
och då vill jag ha databitarna på RB 4-7 och sedan rs på RC2 och E på RC3.
R/W ska enligt manualen vara kopplad til GND så därför ska man väl inte skriva något där? Men det verkar som om funktionen måste ha tre parametrar på ctrl_port? Så vad ska man skriva där?
Lcd_Custom_Config(&PORTB,7,6,5,4,&PORTC,2,"Vad ska jag då skriva här",3);
Tack för era svar. Har vart till mycket hjälp trots att jag kanske är lite trög

Tja, jag vet inte om den *måste* ha en definition för R/W.
Kanske att du måste sätta in en pinne där, men inte koppla den...
[Öppnar manualen...]
Jahaja, alltså exakt så som de har gjort i exemplet i manualen...
Sen kan man tycka att de skulle ha kostat på sig att kommentera
i manualen att de definierar RB0 som R/W-pinne i koden, men inte
använder den i schemat, men deras manuler imponerar inte
annars heller...
Kanske att du måste sätta in en pinne där, men inte koppla den...
[Öppnar manualen...]
Jahaja, alltså exakt så som de har gjort i exemplet i manualen...

Sen kan man tycka att de skulle ha kostat på sig att kommentera
i manualen att de definierar RB0 som R/W-pinne i koden, men inte
använder den i schemat, men deras manuler imponerar inte
annars heller...
Hej igen. Nu har projektet börjat ta form ordentligt och vi har lyckats koppla ihop tungelemt, mikrokontroller och LCD. Mjukvaran är dock inte helt klar då vi har ett problem...
När magneten sluter kretsen över tungelementet så fångar CCP enheten upp signalen och tar tiden tills nästa puls. Detta skrivs sedan ut på LCD.
Problemet är att det bara fungerar ibland. Det känns som det "låser sig".
Vi har programmerat att den ska vänta på nästa puls i en while-sats.
Problemet är att den ibland stannar kvar i första eller andra while-satsen och inte kommer därifrån. Detta gör den nästan med en gång.
Vad tror ni det kan vara för fel? Eller har jag glömt något?
Har förstått att det kan vara något med overflow som Icecap beskrev tidigare. Det kanske är så att CCP enheten fångar upp "för många" signaler när tungelemtet sluter eller en kontaktstuds?
Kod:
-------------------------------------------------------------------------------
PIR1.CCP1IF = 0;
PIR1.TMR1IF = 0;
while (PIR1.CCP1IF == 0 )
{
}
t1 = CCPR1H*256;
t1 += CCPR1L;
PIR1.CCP1IF = 0 ;
PIR1.TMR1IF = 0;
while (PIR1.CCP1IF == 0 ) /* vänta på nästa capture */
{
}
t2 = CCPR1H*256;
t2 += CCPR1L;
-------------------------------------------------------------------------
Vad tror ni?
//Seqius
När magneten sluter kretsen över tungelementet så fångar CCP enheten upp signalen och tar tiden tills nästa puls. Detta skrivs sedan ut på LCD.
Problemet är att det bara fungerar ibland. Det känns som det "låser sig".
Vi har programmerat att den ska vänta på nästa puls i en while-sats.
Problemet är att den ibland stannar kvar i första eller andra while-satsen och inte kommer därifrån. Detta gör den nästan med en gång.
Vad tror ni det kan vara för fel? Eller har jag glömt något?
Har förstått att det kan vara något med overflow som Icecap beskrev tidigare. Det kanske är så att CCP enheten fångar upp "för många" signaler när tungelemtet sluter eller en kontaktstuds?
Kod:
-------------------------------------------------------------------------------
PIR1.CCP1IF = 0;
PIR1.TMR1IF = 0;
while (PIR1.CCP1IF == 0 )
{
}
t1 = CCPR1H*256;
t1 += CCPR1L;
PIR1.CCP1IF = 0 ;
PIR1.TMR1IF = 0;
while (PIR1.CCP1IF == 0 ) /* vänta på nästa capture */
{
}
t2 = CCPR1H*256;
t2 += CCPR1L;
-------------------------------------------------------------------------
Vad tror ni?
//Seqius

Det konstiga är att den fastnar nästan alltid i den andra loopen och mer sällan i den första.
Jag har läst i databladet om PIE1.CCPIE där det står: "The user should keep bit CCP1IE clear to avodie false interrupts..."
Behöver jag också göra det för att capture mode ska fungera?
Annars som du skriver Sodjan så har jag funderat på vad som skulle hända om man får en ny interrupt innan man har gått in i loop nr2. Men vad jag kan läsa mig till i databaldet så skriver den bara över värdena i CCPR1H och CCPR1L registrena så skillanden blir ju så otroligt liten så det inte gör något? Eller kan den "hänga" sig om detta händer?
Jag har läst i databladet om PIE1.CCPIE där det står: "The user should keep bit CCP1IE clear to avodie false interrupts..."
Behöver jag också göra det för att capture mode ska fungera?
Annars som du skriver Sodjan så har jag funderat på vad som skulle hända om man får en ny interrupt innan man har gått in i loop nr2. Men vad jag kan läsa mig till i databaldet så skriver den bara över värdena i CCPR1H och CCPR1L registrena så skillanden blir ju så otroligt liten så det inte gör något? Eller kan den "hänga" sig om detta händer?