Hoi mede CO'ers,
Ik ben bezig met een PIC-webserver te maken. Ik heb een 18F4520 en een ENC28j60 op een zelfgemaakt printje gesoldeerd (als het allemaal werkt komt 'ie in de show your projects :)).

Ik gebruik nu een labvoeding op 8 volt om een 7805 te voeden voor de spanning voor de PIC. Deze 5 volt wordt door een LM317 in ong. 3,6 Volt gezet voor de ENC28j60. Beide regulators hebben 100 nF ontkoppel C's en elco's volgens onderstaand schema. Aan de PIC hangt ook een LCD. Het gekke is dat de PIC niet erg stabiel is:

Als ik het hele happie met de schakelaar van de labvoeding schakel (klik aan - klik uit) dan werkt het in 80 % van de gevallen goed, er staat tekst op de LCD (vooral als mijn schakeling een tijdje aan heeft gestaan. Maar als die een tijd uit heeft gestaan werkt het weer minder). Als ik de kabel tussen de voeding en mijn schakeling gebruik om te schakelen (dus hem in de bus van de labvoeding steek) dan werkt het niet goed: de LCD laat snel oscillerende troep zien (niet eens karakters, gewoon random garbage). De enc draait op 25 MHz crystal met 18 pF c's en de PIC op 40 MHz (10 MHz 4xPLL met 22 pF c's).

Mijn oplossingspogingen:
-het laag trekken van /MCLR om te resetten werkt niet, de LCD vult zich met 3'en (?!) en na een reset weer garbage.

-Ik heb een delay 1 sec als eerste instructie om de oscillator op gang te laten komen

-Ik heb met het IESO (internal/external clock switch over) geprobeerd.

Wat kan het verschil maken dat de labvoeding aan/uit schakelen wel werkt en de draadjes van de schakeling schakelen niet? Heeft het iets met de 7805/lm317 seriecombinatie te maken?

http://www.uploadarchief.net/files/download/resized/schema.jpeg
klikbaar

[edit] Ik heb zojuist ook het tweede Vdd/Vss paar aangesloten en een 100 nF erover gezet, maar geen verschil...

lm317 vanuit 8 volt voeden ? misschien te weinig spanningsval over lm317

Kan ik proberen, maar die LM317 voedt alleen de ENC op 3,6 volt. Het probleem lijkt in de PIC te zitten en die wordt direct met de 5 volt uit de 7805 gevoedt...
[edit] geprobeerd, maar geen verschil

[Bericht gewijzigd door Adhy op (11%)]

Ik vermoed dat het iets met een of andere interferentie te maken heeft waar ik eigenlijk nog niet zo veel van weet. Daarom hier mijn board-layout. Als iemand het een en ander met elkaar in verband kan brengen, dan zou ik daar weer erg mee geholpen zijn in mijn zoektocht...

http://www.uploadarchief.net/files/download/resized/board.jpeg
klikbaar

Ik heb nog een plane ge'pour'd (heet dat zo?). Geen groundplane zoals wellicht beter zou zijn. Staat niet hierop voor de leesbaarheid.

De ENC28J60 gebruikt maximaal zo'n 200mA.
Volgens de datasheet heeft de LM317 bij 25 graden en 200mA belasting een drop-out voltage van 1.8 volt.
5-3.6=1.4, dus dat gaat zo niet...

waarom voed je lm317 uit je 7805? Kan dat niet direct vanaf de 8 volt?

3 v is een veilige marge voor lm317, maar datzei ik dus al

Bedankt voor de reacties tot nu toe!
Als ik een nieuwe print ga maken dan zal ik de lm317 zeker direct uit de 8V voeden, ik heb geen idee waarom ik dat niet al meteen heb gedaan eigenlijk...

Helaas lost dit het grootste probleem niet op: zelfs met afgekoppelde lm317 en geen ENC op de print doet de PIC raar.

Ik programmeer de pic met MikroC. Als ik de lcd initialiseer, dan een enkel karakter naar de lcd schrijf en vervolgens een tekenreeks:


void    main()
        {
        while (!OSTS)     // Wait for stable oscillator
        Delay_ms(1000);
        adcon0=0;
        adcon1=0b00001111;
        TRISB=0;
        Delay_ms(500);
        Lcd_Init(&LATB);         // Initialize LCD connected to PORTB

  Lcd_Cmd(Lcd_CLEAR);       // Clear display
  Lcd_Cmd(Lcd_CURSOR_OFF);  // Turn cursor off
  Delay_ms(100);
  Lcd_Chr_Cp('a');
  Delay_ms(1000);
  Lcd_Out(2, 2, "ajhgf");      // Print text to LCD, 2nd row, 1st column
  Delay_ms(100);
while(1);
}

dan reageert de pic dus afhankelijk van de gekozen voeding:
-schakelen met de aan-uit knop van de labvoeding: hij doet het meestal goed.
-schakelen met draadje prikken in aanstaande voeding: het ene karakter, de 'a' staat soms netjes op de lcd en zodra hij de 'ajhgf' gaat schrijven geeft hij random garbage op de lcd hoop trillen en schokken enzo.

Dit heb ik een aantal keer waargenomen en is echt een patroon, geen toeval. Als ik de labvoeding een tijdje uit heb laten staan en dan klik-aan dan doet hij het meestal ook niet goed...

Iemand een idee? Ik snap er echt niks meer van :7

parallel op c13 een grotere capaciteit zetten
afhankelijk hoeveel stroom de schakeling gebruikt (inschakelpiek ?)
maar 1.000 uf of zo zal wel gaan en kijken of dat effect geeft

Bedankt voor de suggestie, ik heb 'm geplaatst, maar helaas geen verschil.

Het rare is dat de PIC eerst wel goed loopt steeds (de lcd wordt wel geinitialiseerd, en de a komt netjes op het scherm), daarna gaat het pas mis... knipperende zwarte blokjes met onleesbare rommel ertussendoor

IK BEN ERUIT!! Dat wil zeggen, ik heb het probleem gelocaliseerd..

De 74HCT08N in het schema die de level-conversie 3,3->5 doet tussen de enc en de pic veroorzaakte het probleem. Ik heb hem vervangen door een ander en nu werkt het vlekkeloos.

Nu herinner ik me ook weer dat hij het helemaal in het begin ook goed deed en pas later kuren ging vertonen. Gaat zo'n AND poort stuk op de manier dat ik hem heb aangesloten, of is het puur toeval (waarvan sommigen zeggen dat het niet bestaat) ?? Het lijkt alsof ik hem volgens schema heb aangesloten.

op schema staat 7408N
er is wel een verschil
7408 HCT heeft 1 input level van 3,1 volt, de 7408N van 2 volt

Ah, dat wist ik niet... Voor de conversie van 3,3->5 voldoen dan toch beide exemplaren?

Dan nu het slechte nieuws.. Het probleem is toch niet verholpen door de 7408 te vervangen. Het probleem was een paar uur geleden toch ineens weer terug.

Om niet de haren uit mijn hoofd te hoeven trekken (ik ben zowieso al kalend, dus dat beetje moet je koesteren) dacht lk de hele schakeling opnieuw op te bouwen. In een breadboard ben ik toen begonnen met een 18f4520 zonder extern kristal en met 100 nF'jes over de voedingspinnen. Verder een lcd op PORTB en een ledje op PORTB.1

zelfs zo basic geeft hij het probleem: met de labvoeding schakelen gaat het goed, de led knippert en de lcd wordt geinitialiseerd. Met de voedingsdraadjes schakelen, of de /MCLR gebruiken: de lcd wordt niet geinitialiseerd, maar de led knippert wel. er zit een pullup op de /mclr en alle poorten zijn volgens mij output gezet:

dit is de code:


char *text = "CO is gaaf";

void main() {
intcon=0x00;
intcon3=0x00;
TRISA = 0x00;
TRISB = 0x00;
TRISC = 0x00;
TRISD = 0x00;
TRISE = 0x00;                // PORTB is output
adcon0=0x00;
adcon1=0b00001111;
  Delay_ms(1000);            // ledje knipperen
  PORTB.F1 = 0;
  Delay_ms(1000);
  PORTB.F1 = 1;

  Lcd_Init(&PORTB);         // Initialize LCD connected to PORTB
  Lcd_Cmd(Lcd_CLEAR);       // Clear display
  Lcd_Cmd(Lcd_CURSOR_OFF);  // Turn cursor off
  Lcd_Chr_Cp('a');
  Delay_ms(1000);
  Lcd_Out(1, 1, text);      // Print text to LCD, 2nd row, 1st column
}//~!

Heeft iemand een idee hoe dit komt? Het lijkt iets met zwevende pinnen te maken te hebben, maar alles is output. Ik snap er helemaal niks meer van...