| 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:
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
|