74HC595 + PIC 16f648A

Weer het zoveelste topic over de 74HC595 hoor ik al denken maar ik kom er helaas niet meer uit. Ik ben een paar week nu bezig met PiC's en gebruik PICbasic + Proton IDE als taal en programmer.

Ik gebruik het volgende schema:

http://i4.photobucket.com/albums/y149/skimmerbas/schema.jpg

Verder geen extra dingen toegevoegd behalve een 100n ontstoorcondensator voor de PIC.

Datasheet van het register (de ST):
http://www.datasheetcatalog.com/datasheets_pdf/7/4/H/C/74HC595.shtml

Eerst probeer ik het schuifregister linksboven aan te sturen met de volgende datalijnen:

code:


SYMBOL DataPin     = PORTB.0 ;Pin 18
SYMBOL ClockPin    = PORTB.1 ;Pin 17
SYMBOL latch       = PORTA.2 ;pin 1
SYMBOL ON          = 1       ;AAN
SYMBOL OFF         = 0       ;UIT

Het programma daarvoor is als volgt:

code:


DEVICE 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF
ALL_DIGITAL TRUE 
CLEAR

SYMBOL DataPin     = PORTB.0 ;Pin 18
SYMBOL ClockPin    = PORTB.1 ;Pin 17
SYMBOL latch       = PORTA.2 ;pin 1
SYMBOL ON          = 1       ;AAN
SYMBOL OFF         = 0       ;UIT

DELAYMS 1000

;Dpin, Cpin, Mode, [MijnData]        12345678
SHOUT DataPin, ClockPin, LSBFIRST, [%11111111]
latch = ON
DELAYMS 5
latch = OFF

END

Iemand enig idee wat ik fout doe?

Je vergat te vermelden wat er fout gaat... :-)

Verder: MR (aan Vcc) en OE (aan GND) goed aangesloten?
En misschien een "latch = OFF" voor je SHOUT aan het werk zet? Wellicht overkill, maar zeker is zeker.

Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)

Wat er fout gaat: De IC reageert volgens mij niet goed met het register. Als ik een LCD aansluit en wat tussenstappen inprogrammeer, dan komt ie daar niet. Dus hij loopt het programma niet goed door.

Maar dat is op een breadbordje. Het hele schema heb ik ook opgebouwd op een europrintje en daar werkte het half. Sommige LED's gingen wel aan en andere niet. Maar dat lag eerder aan het programma weer aangezien ie het de ene keer wel deed en de andere keer niet.

Het is een beetje vaag maar daarom vraag ik jullie. De pinnen/hardware zit verder wel goed volgens mij.

Heeft iemand een stukje software met mijn pinnen waarvan zeker is dat het werkt? Dan kan ik daarmee verder klooien.

Even uit m'n hoofd: volgens mij zijn de PORTA pinnen default als input ingesteld.
Dus:

code:


latch = ON
DELAYMS 5
latch = OFF

... doet volgens mij niet zo heel veel als je niet ook eerst...

code:


TRISA = %11111011

... doet (PORTA.2 als output configureren).

En oh ja, gebruik je nu een 16F628a of een 16F648a?

[Bericht gewijzigd door picsels op vrijdag 28 december 2007 20:58:19 (11%)

Volgend project: funcgen met ad9833 afmaken...

Dat klinkt heel logisch maar helaas heeft het nog niet het gewenste effect. Hij loopt het programma gewoon niet goed door?

Het is een 64A overigens maar voor het proggen maakt dat niks uit heb ik gelezen.

Bedankt voor de snelle reacties overigens.

De sim draait overuren vanavond...

Je tris settings waren niet goed.

Draait nu als een zonnetje..

code:

Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF 
ALL_DIGITAL TRUE 
Clear
TRISA=0
TRISB=0 
Symbol DataPin = PORTB.0 ;Pin 18 
Symbol ClockPin = PORTB.1 ;Pin 17 
Symbol latch = PORTA.2 ;pin 1 
Symbol On = 1 ;AAN 
Symbol OFF = 0 ;UIT 
DelayMS 1000 ;Dpin, Cpin, Mode, [MijnData] 12345678 
SHOut DataPin, ClockPin, lsbfirst, [%11111111] 
latch = On 
DelayMS 5 
latch = OFF 
End

http://home.casema.nl/galaxy/temp.jpg

In the beginning there was nothing.... and even that exploded...

Super! Voor zover ik kan zien werkt het nu :) Als je er zolang naar kijkt, zie je simpele dingen over het hoofd.

Bedankt!

Mijn post hierboven ook over het hoofd gezien??

Maar in elk geval mooi dat het werkt!

Volgend project: funcgen met ad9833 afmaken...

Op 28 december 2007 21:59:53 schreef picsels:
Mijn post hierboven ook over het hoofd gezien??

Maar in elk geval mooi dat het werkt!

Ik had hem wel gezien maar gewoon blindelings gekopieërd en het werkte niet direct. Aangezien ik er gister aardig zat van was heb ik er toen verder niet meer naar gekeken.
Het was wel de oplossing idd. dus bedankt :)

No worries :+

Kun je trouwens niet nog een aantal pinnen besparen door de clock en data-lijnen gemeenschappelijk aan te sluiten, en alleen de latches individueel?

Volgend project: funcgen met ad9833 afmaken...

Klopt, je kan em ook nog in serie zetten. Maar dan moet er wel eerst 1 werken..

Want het lukt me nog steeds niet :X Ze gaan wel aan, maar daarna kan ik ze niet weer uit doen. Of in een patroontje knipperen oid. gaat ook niet. Wat doe ik dan fout? Ik gebruik de code zoals `Galaxy heeft laten zien.

code:

Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF 
ALL_DIGITAL TRUE 

Symbol DataPin = PORTB.0 ;Pin 18 
Symbol ClockPin = PORTB.1 ;Pin 17 
Symbol latch = PORTA.2 ;pin 1 
Symbol On = 1 ;AAN 
Symbol OFF = 0 ;UIT 

Clear
TRISA=0
TRISB=0 

; continue aan- en uitknipperen
while 1=1

  ; Alles aan
  DelayMS 1000
  ;     Dpin,    Cpin,     Mode,     [MijnData] 12345678 
  SHOut DataPin, ClockPin, lsbfirst, [%11111111] 
  latch = On 
  DelayMS 5 
  latch = OFF

  ; Alles uit
  DelayMS 1000
  SHOut DataPin, ClockPin, lsbfirst, [%00000000] 
  latch = On 
  DelayMS 5 
  latch = OFF
Wend
 
End

Zoiets zou dan toch moeten werken?
Simpel alles aan- en uitzetten.
(Even uit m'n hoofd, niet gecheckt...)

Volgend project: funcgen met ad9833 afmaken...

Als ik dat programma er direct in zet dan gaat het goed. Pas ik ook maar 1 ding aan, bijvoorbeeld led 1 uit i.p.v. aan dan werkt het niet meer?

Hij ging eerst idd. mooi knipperen maar als ik iets verander of stroom eraf en er weer erop doe, dan werkt het niet meer. Ligt het dan toch aan de hardware? Moeten er ergens nog ontstoorcondensators oid over voedingspinnen van het register?
Ik gebruik als voeding een 5V 0.5A voeding.

Edit: Als ik hem een minuutje uit heb, en dan weer aan werkt het ook weer goed.

Edit2: Schijnbaar ligt het toch aan de voeding. Net heb ik wat aangepast in het programma en in de PIC geladen. Vervolgens deed ie uiteraard niks. Een minuutje gewacht en nu voert ie dat programma uit :)

Edit3: Na wat experimenteren met verschillende programma's werkt het allemaal goed op het breadbordje. Zolang ik maar even wacht met de voeding erop te zetten (Lees: Uit doen en na een tijde weer aan) dan gaat het goed. Nu moet het nog werken op het printje maar dat komt wel goed.

Heel erg bedankt :)

[Bericht gewijzigd door TEAMIKKE op zaterdag 29 december 2007 16:42:51 (18%)

Lijkt inderdaad een voedingsprobleempje.

Met de scope in AC stand even checken hoeveel noise er op de voedingslijn staat.

Wat je verder nog kan doen is onder ALL_digital een delay van 50 ms zetten. Dat is om de pic te laten stabiliseren.

Eventueel in je config nog MCLRE_OFF

Verder kan je code nog iets compacter door

latch = On
DelayMS 5
latch = OFF

te vervangen door :

pulsout latch, 500

In the beginning there was nothing.... and even that exploded...

In de praktijk is een wachttijd tussen het hoog maken v/d latch en het terug laag maken totaal overbodig. De 74HC595 reageert enkel op de stijgende flank. Hetzelfde geldt trouwens ook voor de seriële CLK.
Enkel als de schuifregisters aangestuurd worden via lange (> 1m) draden, is een minieme wachttijd aan te raden.

Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)