Shock Media

Navigatie

PIC: Bij B-Poort Interrupt reageert pen B3 ook

Forum > Digitaal > PIC: Bij B-Poort Interrupt reageert pen B3 ook << Vorige | 1 | 2
Naam Bericht
MMSoft

Nu hebben de interne 'stroom bronnen' wel een vermogen van 250ľA, maar deze stroom zal er niet geen lopen zolang er niets op de ingang aangesloten is.

Wat zou het verschil kunnen zijn tussen de interne 'stroom bronnen' en de uitwendige weerstanden van 10K, die zo'n vreemd verschijnsel kan veroorzaken ?

Waarschijnlijk moet ik het meer in de software kant zoeken, maar daarbij ben ik even vast gelopen.
Geregistreerd mikroC gebruiker
Arco

quote:
Wat zou het verschil kunnen zijn tussen de interne 'stroom bronnen' en de uitwendige weerstanden van 10K

Ik denk eerder dat het ligt aan het verschil pull-up of pull-down, en niet aan het type weerstand. (Te testen met externe pull-up ipv. pull-down)
Arco
MMSoft

Daar lijk je een punt te hebben:

De Inwendige 'Pull-Up' weerstanden zijn uitgeschakeld
OPTION_REG.NOT_RBPU = 1;

Met externe 'Pull-Up' weerstanden werkt B3 NIET.
Met externe 'Pull-Down' weerstanden werkt B3 WEL.


Tevens valt er mij nog iets op:

code:
void interrupt()
{
 if (INTCON.RBIF)         //B-Poort Interrupt
  {
   PORTC.F3 = ~PORTC.F3;  //Toggle LED
   INTCON.RBIF = 0;       //Clr B-Poort Interrupt
  }
}


De LED veranderd dus van status als er een B-Poort interrupt optreed.

Met externe 'Pull-Up' weerstanden en een van de pennen B4...B7 'Laag', dan brand de LED zwakker (gaat dus vaak aan en uit) !

Met externe 'Pull-Down' weerstanden en een van de pennen B4...B7 'Hoog', dan brand de LED zwakker (gaat dus vaak aan en uit) !
Bij B3 wordt de interrupt routine ook opgeroepen, maar daarbij is de LED wel aan of uit !

Als de LED zwak brand, dan brand deze op een freq. van 27,8 Khz.
(Kristal is 8 Mhz)

Edit:
Vreemd dat de interrupt routine telkens wordt opgeroepen als de B-poort ingangen niet wijzigen van nivo

Voorbeeld:
B7 = Hoog
B6 = Laag
B5 = Laag
B4 = Laag
B3 = Laag
B2 = Laag
B1 = Laag
B0 = Laag

LED brand zwak, dus de interrupt routine wordt contine opgeroepen. Terwijl de B-poort ingangen niet wijzigen van nivo....

Wie kan dit (voor mij vreemd) verschijnsel verklaren ?
[Bericht gewijzigd door MMSoft op 21 augustus 2008 19:33:06]
Geregistreerd mikroC gebruiker
LaStei

MMSoft, kun je de frequentie eens verlagen? in de erata lijst staat dat er bij hoge frequencies sommige instructies niet goed zouden kunnen uitgevoerd worden?
carpe cerevisi
MMSoft

Net een kristal van 4 Mhz geplaatst (was 8 Mhz), probleem blijft...

Toch nog iets geprobeerd wat met de snelheid te maken heeft:

code:
void interrupt()
{
 if (INTCON.RBIF)         //B-Poort Interrupt
  {
   delay_ms(10);          //Wachttijd 10 ms 
   PORTC.F3 = ~PORTC.F3;  //Toggle LED
   INTCON.RBIF = 0;       //Clr B-Poort Interrupt
  }
}


Dus een Wachttijd van 10 ms geplaatst in de interrupt routine.

Geeft ook geen verschil...
Freq. is nu 25 Hz (kristal 4 Mhz)

Alleen B3 lijkt goed te werken, maar die mag helemaal niet werken
[Bericht gewijzigd door MMSoft op 21 augustus 2008 22:21:21]
Geregistreerd mikroC gebruiker
Daan Timmer

plaats een topic op het microchip forum? Ik denk dat die je verder kunnen helpen indien het een silicon error is.

Directe link:
http://forum.microchip.com/tt.aspx?forumid=11
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
Zonnepaneeltje
Golden Member

Mogelijk is er een mismatch situatie. De vlag wordt dan niet gecleared. Zie datasheet.
Je kunt dit voorkomen door in de interrupt routine PORTB uit te lezen.
Mijn mini-voeding levert 12,2W/dm3 op de subsonic-scale
Arco

Ik heb hier getest op een 877 (heb geen 'A' versie), en daarop werkt je voorbeeld zoals het hoort... (Geen interrupt)

quote:
indien het een silicon error is

De 877A is er al een hele tijd, en is veel gebruikt. Het lijkt me sterk dat zo'n grove fout er zolang ongemerkt in kan blijven zitten. (Maar niets is natuurlijk onmogelijk)
Arco
MMSoft

quote:
Ik heb hier getest op een 877 (heb geen 'A' versie), en daarop werkt je voorbeeld zoals het hoort... (Geen interrupt)
Geen interrupt op pen B3 bedoel je toch ?
Bij de pennen B4...B7 krijg je daar wel een normale interrupt ?
Dus als de input status van poort B niet wijzigd, dat de interrupt routine dan niet continu opgeroepen wordt..

Heb je toevallig wel een 876A liggen ?
Daarbij heb ik het probleem ook !


quote:
Mogelijk is er een mismatch situatie. De vlag wordt dan niet gecleared. Zie datasheet.
Je kunt dit voorkomen door in de interrupt routine PORTB uit te lezen.
Dit is inderdaad een grote vooruitgang !

De interrupt routine wordt nu niet meer continu opgeroepen !
Ik ga nog het een en ander testen

Wij kan er iets over deze 'mismatch' situatie vertellen ?

Edit:
Pen B3 veroorzaakt nog steeds een interrupt...
[Bericht gewijzigd door MMSoft op 22 augustus 2008 17:45:15]
Geregistreerd mikroC gebruiker
Arco

quote:
Geen interrupt op pen B3 bedoel je toch ?
Bij de pennen B4...B7 krijg je daar wel een normale interrupt ?

Klopt. Heb helaas alleen nog wat oude f877 en f870, voor de rest alleen nieuwere modellen.
Arco
LaStei

MMSoft, heb je de vraag al eens gepost op de microchip website? Ooit een keer een probleem gehad met een I2C bus en binnen een paar dagen een echt professioneel antwoord.
carpe cerevisi
MMSoft

Nee, daar heb ik het probleem (nog) niet gepost.
(mijn Engels is niet zo geweldig)

Ik ben intussen al enkele jaren met PIC's bezig, en heb al vaker een probleem gehad met deze dingen dat ik niet kon verklaren.
Telkens is het probleem (met hulp op de forum) gevonden, en (ondanks ik wel eens dacht 'het lijkt wel of deze PIC niet goed is' ) bleek het telkens toch niet aan de PIC zelf te liggen...

Hoppelijk heeft iemand tijd/zin om deze korte code eens in een 876A of 877A te plaatsen en te testen of dat het alleen hier mis gaat...
[Bericht gewijzigd door MMSoft op 22 augustus 2008 21:10:21]
Geregistreerd mikroC gebruiker
MMSoft

quote:
heb je de vraag al eens gepost op de microchip website?
Ik heb wel hier de vraag staan (C-Compiler Forum):
http://www.mikroe.com/forum/viewtopic.php?p=82103#82103
(hopelijk is mijn engels een beetje te begrijpen )
[Bericht gewijzigd door MMSoft op 23 augustus 2008 09:56:45]
Geregistreerd mikroC gebruiker
Arco

Heb je geprobeerd om de pull-down weerstanden aan RB4...7 wat lager te maken, of een c'tje erbij? (bv 1k pull-down, of 10k met 10...100nF c'tje naar ground)
Ze gebruiken niet voor niets pull-ups. De portb inputs zijn TTL inputs; iedere spanningspiek boven de 0.8v kan al als een '1' worden gezien. Andersom is de boel natuurlijk veel minder gevoelig; dan heb je minimaal pieken beneden de 2 volt nodig om '0' te worden. (3 volt piek dus bij pull-up tegen 0.8v piek bij pull-down)
Ik denk dat de interrupt gewoon door een of andere spike op de RB4...7 pinnen wordt veroorzaakt...
[Bericht gewijzigd door Arco op 23 augustus 2008 14:12:38]
Arco
MMSoft

Als er een interrupt optreed en ik lees (in de interrupt routine) direct de B poort uit, dan is het wel degelijk bit 3.

Tja, het blijft vreemd...

Edit:
Pull-down weerstanden op B4...B7 vervangen door 1K.
Probleem is opgelost !!!!

(straks nog verder testen, moet nu weg)
[Bericht gewijzigd door MMSoft op 23 augustus 2008 14:26:29]
Geregistreerd mikroC gebruiker
Arco

quote:
Als er een interrupt optreed en ik lees (in de interrupt routine) direct de B poort uit, dan is het wel degelijk bit 3

Dat kan. Na een interrupt duurt het zo'n 10 instruction cycles voordat je de port b kunt hebben uitgelezen. Dat is bij 8MHz clock 10 * 0.5 = 5µS. Spikes korter als 5µS zie je dus niet. (De port RB4...7 pins zijn alweer laag als je ze uitleest...)
Waarschijnlijk is een 10k weerstand met een 1nF parallel ook al afdoende... (1nF is ook gunstig tegen ESD)
[Bericht gewijzigd door Arco op 23 augustus 2008 16:20:53]
Arco
MMSoft

Met de 1K weerstanden werkt het goed !

In het andere forum kreeg ik als antwoord dat ik ook
INTCON.PEIE hoog moest maken.

Dat heb ik ook even geprobeerd (met de 10K weerstanden), maar dat maakt geen verschil, het probleem met B3 bleef.

Dus ik kan niet anders dan constateren dat Arco het bij het juiste einde had en het een spike geweest moet zijn.
Waarom alleen bij B3 en niet bij B0...B2 begrijp ik echter niet...

Nog even over het antwoord INTCON.PEIE hoog maken.
Wie ziet hier de logica van in ?
Nu moet ik zeggen dat ik nooit precies weet bij welke interrupt vrijgave deze bit geset moet worden...
[Bericht gewijzigd door MMSoft op 23 augustus 2008 19:02:10]
Geregistreerd mikroC gebruiker
Arco

quote:
Waarom alleen bij B3 en niet bij B0...B2 begrijp ik echter niet..

Simpel. De B3 pin ligt (ook fysiek) het dichtste bij de B4 pin, dus heeft de grootste invloed.
quote:
Nog even over het antwoord INTCON.PEIE hoog maken.

Is volgens mij niet nodig...
Arco
MMSoft

quote:
Is volgens mij niet nodig
Werkt inderdaad ook al is deze bit niet geset.

(Mocht iemand kunnen vertellen in welke gevallen deze bit wel geset moet worden dan hoor ik dat graag )

Iedereen bedankt !
Geregistreerd mikroC gebruiker
FullPower

quote:
Op 20 augustus 2008 20:36:08 schreef MMSoft:
Ik zou bijna gaan denken dat er iets met deze PIC's aan de hand is


Al eens in de Errata sheets gekeken??

Zelf ook al diverse keren 'grapjes' met PIC's gehad, waarbij ik mezelf de vraag stelde: ben ik gek of klopt die PIC niet... (99% van de gevallen lag het overigens NIET aan de PIC )

FullPower
De grootste moeilijkheden liggen daar waar we ze niet zoeken. [Goethe]
MMSoft

quote:
Al eens in de Errata sheets gekeken??
Nee, die ken ik niet.
Ik zal er eens naar zoeken (of kan je zo vertellen waar ik die kan vinden ?).

quote:
(99% van de gevallen lag het overigens NIET aan de PIC
blijft er 1% over
Al eens een fout in een PIC gevonden ?

Ik wel
Maar dat ging dan over bijvoorbeeld een opgeblazen uitgang of een ADC die niet meer wou (nadat ik vast en zeker iets had gedaan waar ze niet tegen kunnen).
Geregistreerd mikroC gebruiker
Zoeken in topic << Vorige | 1 | 2