hey

Ik heb hier een microcontroller(atmega16) en een 74ls164.
De atmega16 is op een stk500 geplaast en deze word gevoed door een pc voeding(12v). De 74ls164 is op een breadbord geplaast en met 5 volt voeding van die zelfde voeding van de atmega16.Op de uitgangen van de 74ls164 heb ik leds geplaast met een weerstand van 22 ohm. Dit is het programma van de atmega16:


Config Portb = Output
Dim A As Byte

A = &B11110000
Do
Shiftout Portb.0 , Portb.1 , A , 0 , 8

Waitms 200
Toggle A
Loop

Nu doet de 74164 iets heel anders dan die moet.
Al vast bedankt.

RT

Op 5 maart 2005 19:21:40 schreef robint91:
Nu doet de 74164 iets heel anders dan die moet.

1 - wat doet 'ie precies?
2 - wat zou 'ie moeten doen?
3 - wat doet de procedure "Shiftout" ?
4 - hoe zit de hardware aangesloten?
( portB.0 <-> 74ls164-pin ... )
( portB.1 <-> 74ls164-pin ... )

@logic
1 en 2) de eerste vier leds gaan aan en uit maar de laats 4 blijven aan (normaal moeten ze uit waneer de eerste aan gaan en anderom.
3)shiftout is vergelijk baar met een shiftregister
Parralle.In.Serail.Out maar dan genereet die zijn eigen clock signaal.

portb.1 -> cp(clock)
portb.0 -> A1 en A2 (data ingangen)

RT

Als ik jou was, zou ik eens het volgende proberen: vertragen, zodat je kan volgen wat er gebeurt.
Gebruik niet de procedure shiftout, maar bestuur de lijnen direct in de LOOP.

...
...

Portb.1 = 0        // maak clock laag

Do

  Portb.0 = A.0      // A.0 is 1e databit
  Portb.1 = 1        // maak clock hoog
  Waitms 1000
  Portb.1 = 0        // maak clock laag

  Portb.0 = A.1      // A.1 is 2e databit
  Portb.1 = 1        // maak clock hoog
  Waitms 1000
  Portb.1 = 0        // maak clock laag

  ...
  ...
  ...

  Portb.0 = A.7      // A.7 is 8e databit
  Portb.1 = 1        // maak clock hoog
  Waitms 1000
  Portb.1 = 0        // maak clock laag

  Waitms 2000        // 2 seconden wachten
  Toggle A
Loop

Hang aan portB.0 en portB.1 een LEDje, zodat je kunt zien of-en-wanneer die lijnen hoog worden.
Misschien zit de fout in de snelheid waarmee e.e.a. wordt aangestuurd (hoewel ik me dat bij LS niet echt voor kan stellen), misschien zit 't in de procedure Shiftout, misschien in iets anders ...
Door te vertragen kun je iig zien wat er gebeurt en gaan debuggen.

Op 5 maart 2005 19:21:40 schreef robint91:
Op de uitgangen van de 74ls164 heb ik leds geplaast met een weerstand van 22 ohm.

Errr 22 Ohm ??? bij 5 volt? 195mA door je LED heen (als het schiftregister het zou kunnen leveren) :9
denk ook niet dat ie dat fijn vindt eerlijk gezegt hoor. wellicht veroorzaakt dat je problemen?

Nu werkt hem beter ik hebeen 220 ohm weerstand van pin1 naar de gnd gedaan. Maar soms durft hem wel eens te verspringen.

RT

Heb je de bovenstaande code uitgeprobeerd? (1 sec. wachten tussen clock-hoog en clock-laag)
Ik ben benieuwd of 'ie het dan wel perfect doet.
Misschien moet je heel even wachten tussen het klaarzetten van de data en het hoog maken van de clocklijn, zodat de data de tijd krijgt zich te settelen.

Dus niet:

Portb.0 = A.0 // zet data klaar
Portb.1 = 1 // maak clock hoog
Waitms 1000 // even wachten
Portb.1 = 0 // maak clock weer laag

maar:

Portb.0 = A.0 // zet data klaar
Waitms 1000 // even wachten zodat data stabiel wordt
Portb.1 = 1 // maak clock hoog
Waitms 1000 // even wachten
Portb.1 = 0 // maak clock weer laag

Uiteindelijk hoef je natuurlijk niet 1000 milliseconden te wachten, maar zo kun je goed zien wat de data- en clocklijnen precies doen. (LEDjes d'r aan)

Gefeliciflapstaart. :-)

Gisteren schreef je nog: "Maar soms durft hem wel eens te verspringen."
Doet 'ie het nu helemaal perfect?
Wat heb je gedaan dan? (vertragingen d'r in of zo?)

ik had gemeten met mijn multimeter hoeveel snel de verbinding is. Die heb ik de freq lager gezet. Nu gaat het goed.

RT