
Hjälp med 16F1937
Re: Hjälp med 16F1937
Bra tips, ska prova under dagen..... Får se om det blir bättre. Visste inte ens att det fanns en timer kalkylator 

- SeniorLemuren
- Inlägg: 8427
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Hjälp med 16F1937
Detta program är testat i Proteus och fungerar.
Att inte timerinteruptet fungerade berodde på att du satt bit 5 i OPTION_REG till 1.
[/code]
Kod: Markera allt
//Timer0
// Prescaler 1:256;
// TMR0 Preload = 58;
// Actual Interrupt Time : 199,688 ms
// Pocessorclock 1.0 Mhz
// µC PIC16F1937
// INTOSC oscillator
void InitTimer0(){
OPTION_REG = 0x87;
TMR0 = 58;
INTCON = 0xA0;
}
void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0 = 58;
//Enter your code here
RD0_bit = 1 ;
delay_ms(80);
RD0_bit = 0 ;
delay_ms(80);
}
}
void main(){
TRISA=0b00000000;
TRISB=0b00000000;
TRISC=0b000000;
TRISD=0b00000000;
TRISE=0b00000000;
INTCON=0b10111000;
OPTION_REG=0b00000111;
ANSELA=0;
ANSELB=0;
while(1){
//for ever loop
}
}
Kod: Markera allt
[code]bit 5
TMR0CS: Timer0 Clock Source Select bit
1 = Transition on T0CKI pin
0 = Internal instruction cycle clock (FOSC/4)
Re: Hjälp med 16F1937
Har fått igång det nu tack vare er och timer kalkylatorn.. Pwm utgången är perfekt.. Däremot fick jag en spännande feature. Har en annan pinne på port d som styr en fet så jag kan fimpa matningen till servot. Denna porten kan man säga togglas ihop med pwm utgången fast med en helt annan duty cycle... Men det får bli en utmaningen ngn annan dag.. Det är liv i skiten och nu ska jag ta en paus 

Re: Hjälp med 16F1937
Det finns ett fenomen som kallas "read-modify-write".
När man ändrar en enstaka pinne i en port (t.ex PORTD) så sker detta:
- Hela PORTD läses direkt från det register som återspeglar själva pinnarnas läge.
- Den aktuella pinnen ändras.
- Hela PORTD skrivs tillbaka, d.v.s alla 8 bitarna (eller hur stor PORTD nu är).
Det som kan inträffa är att en enstaka pinne drivs utifrån till ett läge som inte
motsvarar det man tror att den har (d.v.s det som senast skrivs till PORTD)
och när PORTD återskrivs så kommer detta att bli det nya läget.
Det du ska se till är att pinnen som driver FET'en alltid är satt till utgång och att
det inte finns något som hårt driver pinnen utifrån. Om du ibland ställer om pinnen
till ingång, så måste det finnas pullup (eller down) motstånd så att pinnen inte "flyter".
Lösningen på de nya PIC16F1xxx modellerna är att alltid skriva till LATx (t.ex LATD)
och läsa från PORTD.
En enkel test är att byta ut #define SERVO PORTD.F1 till #define SERVO LATD.F1
Se även:
http://www.mikroe.com/download/eng/docu ... lp/rmw.htm
När man ändrar en enstaka pinne i en port (t.ex PORTD) så sker detta:
- Hela PORTD läses direkt från det register som återspeglar själva pinnarnas läge.
- Den aktuella pinnen ändras.
- Hela PORTD skrivs tillbaka, d.v.s alla 8 bitarna (eller hur stor PORTD nu är).
Det som kan inträffa är att en enstaka pinne drivs utifrån till ett läge som inte
motsvarar det man tror att den har (d.v.s det som senast skrivs till PORTD)
och när PORTD återskrivs så kommer detta att bli det nya läget.
Det du ska se till är att pinnen som driver FET'en alltid är satt till utgång och att
det inte finns något som hårt driver pinnen utifrån. Om du ibland ställer om pinnen
till ingång, så måste det finnas pullup (eller down) motstånd så att pinnen inte "flyter".
Lösningen på de nya PIC16F1xxx modellerna är att alltid skriva till LATx (t.ex LATD)
och läsa från PORTD.
En enkel test är att byta ut #define SERVO PORTD.F1 till #define SERVO LATD.F1
Se även:
http://www.mikroe.com/download/eng/docu ... lp/rmw.htm
Re: Hjälp med 16F1937
Jisses, ska kolla, tack för tipset. Ibland undrar jag om det inte varit bättre att ha matlagning som yrke och hobby. ....
Re: Hjälp med 16F1937
Provade igår kväll lite snabbt och det verkade funka.. måste prova mer under veckan för att övertyga mig själv... Men en fråga. På länken du skickade fr Mikroe så står det att LATB används till PIC18, inte till PIC16.. nu verkar det som sagt fungera men ändå....
Re: Hjälp med 16F1937
Det var en an nyheterna när PIC16F1xxx ("Enhanced Midrange") serien kom
för 2-3 år sedan. Tidigare saknades direkt tillgång till "output latches", de
fanns så klart i processorn, men de var inte mappade som ett register som
man kan läsa direkt från koden.
Och ja, sidan har alltså inte blivit uppdaterad på några år.
Ett typexempel på hur en för övrigt bra information kan bli
missvisande enbart därför att den inte underhålls...
för 2-3 år sedan. Tidigare saknades direkt tillgång till "output latches", de
fanns så klart i processorn, men de var inte mappade som ett register som
man kan läsa direkt från koden.
Och ja, sidan har alltså inte blivit uppdaterad på några år.
Ett typexempel på hur en för övrigt bra information kan bli
missvisande enbart därför att den inte underhålls...
Re: Hjälp med 16F1937
Ja nu ser det ut som projektet snart är färdigt och koden funkar finemang just nu iaf. Tack för hjälpen