Beste makkers ik heb een probleem met pic microcontroller.
als ik nu een relay of een motor wil aansturen met de gekende schakeling microcontroller,transistor,relay/motor dan begint mijn pic16f877 zich te misrekenen ;(
Ik heb al alles geprobeerd dit op te lossen maar het lukt niet.
compiler is Mikro c, programmer pickit2.
Voor Code gebruik ik een simpel poort RA0 = 1 of RA0 = 0 met 1000 ms delay, gewoon led aan af test programmatje.
Soms doet hij het wel en dan hoor ik de relay op de seconde klikken, maar doe ik de stroom af en weer aan is het gedaan en moet ik lang proberen stroom aan en af dan lukt het weer voor even.
wat ik ook al gemerkt heb is als ik mijn vinger 1mm boven de pic hou hij volledig in het honderd slaat ik hoor de relay dan zeer vlug klikken trillen als het ware.
Is er iemand bekend met dit fenomeen en weet iemand een oplossing?
Hier is het schema hoe ik het in elkaar gezet heb
http://www.uploadarchief.net/files/download/bandicam%202014-01-25%2010-36-45-046.jpg

Je hebt les 1 in digitale schakelingen overgeslagen: elk IC ontkoppelen met minstens een 100 nF condensator over de voedingspinnen.

De condensatoren bij het kristal lijken nu 100nF te zijn. Doorgaans zijn die 22pF.
Wat opvalt is dat de Vss aan pen 21 niet aangesloten is.
Ik weet zo niet of er intern aan RA0 een pull-up te configureren is anders is die uitgang nu aardig aan het zweven, dit kan het rare gedrag wel verklaren.

Je vinger erboven en hij gaat aan de haal... Hmmm. Heb je een foto van hoe het opgebouwd is?

Bedankt voor de reacties op het schema zijn de condensatoren niet juist aangegeven ik gebruik wel 22pf in mijn schakeling.
Dat is goed opgemerkt van je ;)
De pinnen zijn inderdaad niet duidelijk met de benamingen op de tekening maar de VSS op 21 zijn in mijn schakeling wel goed verbonden.
Pin RA0 is rechtstreeks aan de 1K ohm weerstand verbonden (lig niet in verbinding met de MCRL/VPP)

@Fuzzbas bedoel je een 100nf condensator van de VDD naar de VSS verbinden?

Ja, en wel zo kort mogelijk bij de voedingspinnen. En dat twee maal, vermits je twee maal een VDD/VSS-koppel hebt.
Vermits de voedingspinnen telkens vlak naast mekaar liggen, kan je onderaan een MLCC-condensator plaatsen. Keramische condensators met een steek van 100mil zijn ook bruikbaar.

Test eens of het met een LED naar + (met weerstand) wel werkt of zet eens een 47k van basis naar +. Volgens de datasheet is het een open drain uitgang.

Edit: oeps, ik heb naar het verkeerde plaatje gekeken, sorry....

[Bericht gewijzigd door PE1MIU op (20%)]

Nee, alleen RA4 is open-drain. RA0 kun je dus zoals getekend gebruiken.

Het riekt naar wat er al geopperd is over ontkoppeling van de voeding, mogelijk nog aangevuld met een discutabel geroute common ground van die 12V en 5V netten (ground die onderhevig is aan de gevolgen van de belasting die het relais vormt).

Op 26 januari 2014 19:20:13 schreef Timmestein:
Heb je een foto van hoe het opgebouwd is?

Dit dus. Maar voordat je die foto maakt, alvast even goede ontkoppeling toevoegen om te kijken of dat het al oplost.

"Je vinger erboven en hij gaat aan de haal... "

Heb je alle, niet gebruikte, I/O lijnen geconfigureerd?
Dat wil zeggen als uitgang geprogrammeerd?
Als een niet gebruikte lijn als een ingang is opgebouwd
krijg je dit effect.

Joop

Op 26 januari 2014 20:23:00 schreef PE1MIU:
Test eens of het met een LED naar + (met weerstand) wel werkt of zet eens een 47k van basis naar +. Volgens de datasheet is het een open drain uitgang.

Edit: oeps, ik heb naar het verkeerde plaatje gekeken, sorry....

Als ik met een led probeerde werkte het inderdaad beter maar niet altijd 100%

Op 26 januari 2014 20:42:27 schreef pe1bia:
"Je vinger erboven en hij gaat aan de haal... "

Heb je alle, niet gebruikte, I/O lijnen geconfigureerd?
Dat wil zeggen als uitgang geprogrammeerd?
Als een niet gebruikte lijn als een ingang is opgebouwd
krijg je dit effect.

Joop

Dit is de code die ik gebruik het is nog erg basic maar ik ben net begonnen met zelf programmatjes te schrijven.


 void main()
{

  TRISA.A0 = 0;
  PORTA.A0 = 0; 
  do
  {
  PORTA.A0 = 1;
  delay_ms(1000);
  PORTA.A0 = 0;
  delay_ms (1000);
  PORTA.A0 =1;

  }while(1);
  }

[Bericht gewijzigd door Henry S. op (0%)]

Opmerking: Een van je "PORTA.A0 = 1;" instructies is overbodig.

Verder: Post even foto's van je opstelling, waarschijnlijk is daar een hoop op aan te merken wat de storingen zal verklaren.

programmer pickit2

Je gebruikt de pickit2 zeg je, maar ik zie niet op je schema hoe je de ICSP aansluiting gedaan hebt. Ik mis bijv de pullup weerstanden bij pin_39 en pin_40. En bij je MCLR/VPP heb je wel je pullup staan van 10K, maar daar mis ik de 100nF condensator van pin_1 naar de gnd. Die is erg belangrijk omdat je de MCLR_PIN niet uit kan zetten in je programma.

Je hebt dus kans dat je processor continue gereset wordt, zodra je daar in de buurt komt.

Het is al een paar keer gevraagd, post eens een foto van de opstelling.

Het is inderdaad alsof hij constant gereset word.
Ik ga eens zien om een condensator 100nf van de mclr naar gnd want nu heb ik er op elk een van VDD naar VSS.
Ik hoop dat dit probleem dan verholpen is. ;)
Ga vanavond mijn soldeerbout alvast opwarmen.

Zwevende PGM pin met LVP enabled? (Uitzetten of een pull-down aan de pin)

Mag ik voor de pgm naar gnd pull-down ook een 10k gebruiken?

[Bericht gewijzigd door Seb-PCB80 op (12%)]

Zie datasheet. Maar als je in je fuses LVP disabled hebt staan is er niks aan de hand.

En waarom blijf je de opmerking negeren over het tonen van je opstelling op een foto?

Ik ben bang dat ieder die mijn rattennest ziet zich enkel nog op dit zal concentreren ;)
Nu heb ik de schakeling op gaatjes print gemaakt, maar er voor heb ik een pcb gemaakt en op bradboard geprobeerd, het was het zelfde probleem.

Op 27 januari 2014 22:43:10 schreef Seb-PCB80:
Ik ben bang dat ieder die mijn rattennest ziet zich enkel nog op dit zal concentreren ;)

Als dat terecht is, en uiteindelijk je probleem oplost, dan is dat toch juist mooi? Waarom meerdere mensen naar een foto vragen, is omdat dit soort problemen 9 van de 10 keer in de fysieke opbouw zitten, OF omdat er iets mis zit dat niet onder woorden werd gebracht door degene die de schakeling voor zich heeft liggen, omdat hij het geen probleem achtte.

Een PIC op gaatjesprint moet goed kunnen werken, mits fatsoenlijk opgebouwd.

Als we die foto zien, kunnen we beoordelen of het probleem wel of niet in de opbouw kan zitten. Schaam je niet voor je kunstwerk, want we klodderen allemaal weleens wat aan elkaar. Maar sommige dingen zijn cruciaal: de opbouw van de voeding en de fysieke afstand van de ontkoppeling naar je PIC bijvoorbeeld.

Misschien zien we ineens wel dat er een pullup van 18MΩ ipv 18kΩ aan je MCLR hangt... dat soort dingen.

Misschien zien we ineens wel dat er een pullup van 18MΩ ipv 18kΩ aan je MCLR hangt... dat soort dingen.

Ik vindt 18K al te veel, zelf gebruik ik 10K voor de MCLR_PIN.

@ TS,
En de ellende met de 16F877 is, dat je de MCLR_PIN niet uit kan zetten in de software. Zelf heb gebruik ik nu de 16F887 en de 16F1939, daar kan je de MCLR_PIN wel uit zetten. Ze zijn pin compatible met de 16F877, dus je kan ze zonder probleem over zetten/omruilen.

Hier zijn de foto's ik hoop dat jullie er iets kunnen uit opmaken ;)
En alvast nog eens bedankt voor al jullie advies tot nu toe.
Ik heb de pic in een module gebouwd en links onder zijn de 5 programmeer pinnen.
Boven de reset knop zie je een jumper om de MCLR te ontkoppelen van de VDD als ik wil programmeren.
Als het programma er in zit sluit ik een connector van RA0 naar de relay print en GND van pic naar relay print.
http://www.uploadarchief.net/files/download/print%20voor.jpg
Zo als je kan zien heb ik alle suggesties toegepast die jullie mij gegeven hebben.
De vdd en vss 2x ontkoppeld met een 100nf condensator.
Dan een 10k pull-down resistor van de PGM pin naar de GND.
En een 100nf van de MCLR naar de GND.
Nu trilt hij niet meer bij aanraking maar als ik de stroom aanleg doet hij niks tot ik de reset knop indruk dan slaat de relay aan maar niet meer uit, of met een led blijft de led branden, of met een motor in plaats van relay blijft motor draaien. hij voert zijn programma niet uit.
http://www.uploadarchief.net/files/download/print%20achter.jpg

[Bericht gewijzigd door Seb-PCB80 op (31%)]

Ja sorry, maar daar is nog niet veel van te maken.

Kan je de PIC via ISP programmeren? En dat zonder errormeldingen?
Dan zou ik besluiten dat er leven in zit.

Laat het relais er even af en meet de spanning op RA0. Neem er je tijd voor - misschien werkt alles zoals bedoeld, maar véél trager dan verwacht.

Neem er ook eens een loep bij, voldoende licht, en controleer zorgvuldig je soldeerverbindingen.

Een scherpere tweede foto zou al helpen, en dan ook nog allebei in betere resolutie graag.

Verder zie ik geen transistor, relais, etc. Het gaat om het totaal van de gehele schakeling die het probleem produceert, toch?

Je problemen lijken te zitten in een niet goed aangesloten reset of niet goed kristal aansluitingen.

Probeer eerst eens de PIC met de interne oscillator te laten werken.
Heb je ook alles in de congfig bits goed staan met name de reset functie?

Maak nu alle i/o poorten die je niet gebruikt eens uitgang via
tris 0x00.
Alle verhalen over condensators plaatsen is onzin. Zolang jij een standaard voeding gebruikt en niet in een omgeving zit waar van alles in en uitgeschakeld wordt doen die niets.
De weerstand aan de MCLR lijn is ook niet kritisch en het plaatsen van een condensator word door MICRCHIP nergens gepromoot.
Ik werk al 20 jaar met PICs en nooit problemen gehad.

Joop