Nya friska problem med PIC18F46K22 "LÖST"

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
SeniorLemuren
Inlägg: 8382
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Nya friska problem med PIC18F46K22 "LÖST"

Inlägg av SeniorLemuren »

Att det skall vara så attans svårt att skifta från en P18 till en annan. Problemet med OLED var ju väldigt enkelt att lösa när man såg träden i skogen. Nu funkar allt förutom det viktigaste. Nämligen avbrottsrutinen för att läsa encodern. Jag använder Interrupt-on-pin change och pinnarna som jag använder är de samma för både 4550 och 46K22 RB6 och RB7

Så här ser pinkonfig ut:

Kod: Markera allt

     ADCON1 = 0b00001111 ;   // Configure AN pins as digital I/O
     //ANSELA = 0x00;            // Configure AN pins as digital I/O
     //ANSELB = 0x00;            // Configure AN pins as digital I/O
     //ANSELC = 0x00;            // Configure AN pins as digital I/O
     //ANSELD = 0x00;            // Configure AN pins as digital I/O
     //ANSELE = 0x00;            // Configure AN pins as digital I/O
     TRISA  = 0b00100000 ;     // RA5Input backslag
     TRISB  = 0b11110000 ;     // RB6,7 Encoder Bridge // RB4,4 Encoder FlyBridge
     TRISC  = 0b00000000 ;     // RC0,1,2 Output backslag
     TRISD  = 0b00110000 ;     //RD4 = BRIDGE/FLYBRIDGE
     TRISE  = 0b00000111 ;     // input trottle
     LATB   = 0b00000000 ;
     LATC   = 0b00011000 ;     // I2C1
     LATD   = 0b00000011 ;     // i2C2
     LATE   = 0b00000000 ;
     
     //OSCTUNE.PLLEN=1;
     //while (OSCCON.HFIOFS==0); // wait stable oscillator
     
     RBIP_bit = 0 ; //avbrott high pri
     GIE_bit = 1 ;  // enable global int
     RBIE_bit = 1 ; // interupt on change on
     RBPU_bit = 0 ; //Soft pull up port B enabled
     ADON_bit = 0;
     OSCCON = 0b01110000 ;
Detta visar när jag använder 4550 och allt fungerar som det skall. Om man tar bort alla "//" så blir det för 56K22 Då funkar OLED och de I/O portar jag använder, men inte avbrott. Det är väl något register som skiljer sig från 4550 jag missar här förstås, men jag kan ta mig sjutton inte hitta vad det är.
Senast redigerad av SeniorLemuren 22 juli 2015, 09:49:21, redigerad totalt 1 gång.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Nya friska problem med PIC18F46K22

Inlägg av Magnus_K »

Hej SeniorLemuren!

Kul att du grejer runt lite med dessa µC:s och MicroC Pro. Jag sitter med precis samma prylar så jag följer trådarna med stort intresse för att lära mig mer.
Skulle också vilja nämna att det underlättar en del för läsaren om du har lust att länka till de datablad som är relevanta. Speciellt i detta fall när man ska jämföra två enheter.
I ovan inlägg så står det fel µC i sista stycket (vilket givetvis var det enda jag läste när jag skulle kolla datablad).

Reagerade lite på detta -> RBIP_bit = 0 ; //avbrott high pri
Inte för att det kanske löser problemet men det ska väl vara en etta för att ha hög prio? Ref sid 117.

En annan sak är -> RBPU_bit = 0 ; //Soft pull up port B enabled
Om du kikar på samma sida som ovan så står det att för att soft pull-up:en ska vara enable så måste respektive weak pull-up (WPUB) vara satt, vilket jag inte kan se.

Databladet -> PIC18F46K22 :wink:

Ps. Fantastisk historia om resan till Fort Lauderdale! Ds
Användarvisningsbild
SeniorLemuren
Inlägg: 8382
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Nya friska problem med PIC18F46K22

Inlägg av SeniorLemuren »

Ja RBIP_bit hade jag missat men det verkade inte ändra något. När det gäller Soft pull up port B så är det default en etta i registret, så den är redan satt automagiskt. Om du kollar i databladet så står det "R/W-1" ovanför alla WPUB bitarna. Ettan betyder att den är default ett.

Men som sagt. Det är förmodligen något enkelt man missat. Databladen är jobbiga att hitta den information man letar efter.
Niklas-k
Inlägg: 354
Blev medlem: 10 mars 2004, 15:59:21
Ort: Katrineholm

Re: Nya friska problem med PIC18F46K22

Inlägg av Niklas-k »

Under Register IOCB så står det en note "Interrupt-on-change requires that the RBIE bit (INTCON<3>) is set.". Vad jag kan se så har du satt Bit 1.

Edit: Såg att du satt RBIE bit till 1.

Kolla så du har spänning på pull up pinnarna!
janno
Inlägg: 430
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Nya friska problem med PIC18F46K22

Inlägg av janno »

Jag ser inte "Peripheral Interrupt Enable". Sedan har PIC18F46K22 två avbrottsvektorer.
Tror att endast den ena är aktiv som default men jag brukar alltid sätta all konfiguration så man ser att man inte glömt något.

Kod: Markera allt

RCONbits.IPEN = 0;    // Disable Interrupt Priority Vectors
INTCON2bits.RBIP=0; // RB Port Change Interrupt Priority bit
INTCONbits.PEIE = 1; // Peripheral Interrupt Enable bit
Sedan kan det vara bra att kontrollera dokumentationen för MicroC Pro hur man definierar mer än en avbrottsvektor. Antagligen borde lågprio avbrottet vara samma som de PIC;ar som endast har en avbrottsvektor, men man kan aldrig vara säker.
Niklas-k
Inlägg: 354
Blev medlem: 10 mars 2004, 15:59:21
Ort: Katrineholm

Re: Nya friska problem med PIC18F46K22

Inlägg av Niklas-k »

Kolla också upp PBADEN i register CONFIG3H och sätt den till 0.
Användarvisningsbild
SeniorLemuren
Inlägg: 8382
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Nya friska problem med PIC18F46K22

Inlägg av SeniorLemuren »

Nu funkar det. Har jag fattat helt fel här.
interuptproblem.png
Jag var tvungen att sätta portarna:

Kod: Markera allt

IOCB6_bit = 1;               // Enable RB6 interrupt pin
IOCB7_bit = 1;               // Enable RB7 interrupt pin
De fattar jag som att de är default = 1;
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nya friska problem med PIC18F46K22 "LÖST"

Inlägg av sodjan »

Ett bra tips är att alltid sätta de register och bitar som är rellevanta för
det man håller på med, oavsett vad som är default. Det kan kanske vara
rent tekniskt onödigt, men det viktiga är att det blir dokumenterat att
man i alla fall inte har glömt funktionen helt, att man har tänkt på det.
Speciellt för andra som läser samma kod och inte har tänkt som du... :-)

Men för just detta fall så ser det ju ut som att IOC skulle vara "on"
per default efter reset, vilket jag i och för sig tycker är lite underligt.
Det betyder att man alltid skulle behöva stänga av det så snart man
använder de portarna till något alls och samtidigt använder interrupt
(till i princip vad som helst).

Det skulle vara intressant att debugga och se hur de där bitarna
faktiskt är satta. Eller, de är ju läsbara så det är bara att kopiera
en av dom till en LED eller liknande... :-)
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Nya friska problem med PIC18F46K22

Inlägg av Magnus_K »

SeniorLemuren skrev:När det gäller Soft pull up port B så är det default en etta i registret, så den är redan satt automagiskt. Om du kollar i databladet så står det "R/W-1" ovanför alla WPUB bitarna. Ettan betyder att den är default ett.
Det var som fasen. Tycker jag läst en del Microchip-datablad nu men det hade jag helt missat. :tumupp:

Intressant det där med IOC-registret. Det skulle inte vara så att det faktiskt står fel i databladet? Håller med er om att det vore märkligt att dessa skulle vara satta efter reset men på ett sätt har du ju nu bekräftat att så inte var fallet.
I så fall står det ju fel på sidan 87 också...
H.O
Inlägg: 5894
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Nya friska problem med PIC18F46K22 "LÖST"

Inlägg av H.O »

Jag har en 18LF46K22 på ett kort, jag gjorde ett enkelt program som skickar statusen på IOCB registret över UART'en och det verkar som att uppgifterna i databladet är felaktiga. POR på det registret är 0 och inte 240 som det står i databladet. Kretsen jag har står det 1043EPT på och PICkit3 raporterar Device ID Revision 2.
Skriv svar