Vreemd probleem

Het onderwerp verraadt het al, en ik zou niet weten waar ik het anders neer zou moeten zetten dan bij de requests.

Ik heb de (in een eerdere draad genoemde) lichtkrant print, onderhanden genomen en ben nu zover dat ik data in de schuifregisters kan zetten, en de LED's kan laten scannen. Een eerste probeersel was om data in de schuifregisters te zetten en omdat de LED's gescand worden krijg ik dus allemaal verticale strepen van LED's, klopt precies.... tenminste....

Als ik op de PB1 pin van mijn AVR (ATmega8), ga kijken, welke aan de clock inputs van de schuifregisters hangen (74LS164), en ik hang daar mijn scoop aan, gaat alles goed, als ik de scoopprobe loshaal dan werkt het ineens niet meer..... Bijzonder vreemd, de frequentie van de klok voor die pin is geprobeerd tussen de 1MHz en de 100kHz, maar het maakt geen van alle iets uit, echter op het moment dat ik de scoop op die pin hang (de ground is al aangesloten), werkt het weer.

Ook is het volgende probleem, als ik data in de schuifregisters wil stoppen VOOR dat ik de scanner een rij LED's op laat schuiven (zoals het hoort), werkt dat OOK niet. Vreemd probleem dus. Het gaat dus mis bij grote hoeveelheden klokpulsen (telkens 270). Bij het laatste geval maakt het niets uit of de scoop er aan hangt of niet.

Het geheel is opgebouwd op een nieuw breadboard, dus ik zit te denken dat er daar iets mis gaat, maar dat weet ik niet zeker.

Wie kan mij helpen ?

Groetn
Antoine

Nou, als je een nieuw breadboard hebt, dan moet het toch wel lukken. Ik denk dat het probleem zou kunnen liggen op het vlak van statische elektriciteit (EMC). Je scopeprobe heeft een weerstand van 1 of 10 MOhm (afhankelijk van de probe-setting) en als je die weerstand parallel aan de port PB1 zet wordt opgehoopte statische elektriciteit meteen afgevoerd. Een betere bescherming van de port dmv pull-up / pull-down weerstanden zou kunnen helpen.

ciao 4 now.....

Dat had ik dus geprobeerd, ook met een klein C'tje, snap echt niet waar het vandaan komt, ik ga morgen iig een klein printje bouwen, kijken of het dan over is

Iemand andere suggesties ?

Ooit gehoord van
- klok skew
- ringing

Wat voor schuifregisters gebruik je, heb je ze allemaal in een keten staan?

Ringing treed op als een draadje lang is tov je flanksteilheid (heeft dus niets met de clock frequentie te maken!). Meestal geen probleem op data lijnen, maar het kan extra klokplusen 'creeeren'. Extra capaciteit en/of serieweerstand en/of karakteristiek afsluiten helpt meestal (of geen CMOS gebruiken!).

Klok skew is het verschijnsel dat het klok 'moment' niet voor alle chips op precies het zelfde moment optreed. Als nu bv chip N klokt (en zijn uitgang aanpast!) voordat chip N+1 klokt dan heeft N+1 de verkeerde data ingeklokt. Brute oplossingen: klok goed snel houden (evt bufferen) (dit is dus juist slecht voor ringing!), data iets vertragen. Echte oplossing: chips N en N+1 mogen nooit op dezelfde klok flank reageren, dus bv de even chips op een ginverteerde klok zetten (software implicaties!).

Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog

Hoi Wouter,

Bedankt voor de heldere uitleg, een probleem, de lichtkrant print is nu een maal zo en kan ik dus niets meer aan veranderen. Alle schuivers staan in een keten in serie zullen we maar zeggen, de chips zijn 74LS164's en er staan er 39 achter elkaar. De clks van al die chips hangen allemaal aan elkaar, de uC is een ATMega8 op 8MHz. De draden zijn nu niet echt optimaal (denk ik), tis gewoon een stuk flatcable van een 70cm waar alles aan hangt, de scanning van de led's gaat wel goed, de data lijkt het ook, alleen soms komt de data niet goed in de ff's en dus staat er niks, of verminkte data op mijn led's.

Misschien dat je nu wat meer weet ?

Alvast bedankt
Antoine

[edit]
Moet ik er wel ff bijzeggen dat de orginele kabel ook ongeveer een meter lang was, en op bijna dezelfde manier werd aangestuurd
[/edit]

probeer eens een pull-down te plaatsen (scoop is ook een weerstand van 1M naar gnd)

buffer trouwens je avr eens, zo'n 37 ingangen is misschien wat veel voor 1 uitgang

pointers don't kill programs, programmers kill programs

Je gebruikt LS? Dan is ringing niet erg waarschijnlijk, klok skew door belasting veel waarschijnlijker. Bufferen die klok! Reken maar eens uit hoeveel LS ingangen een Ateml uitgang betrouwbaar kan aansturen?

Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog

Ben bang dat je gelijk hebt, ik zal idd eens gaan bufferen, alhoewel ik op de scoop geen inzakkende signalen zie ?

Een weerstand van 1M e.d. had ik al geprobeerd dat was het dus niet. Ik ben intussen begonnen aan een printje daarvoor, heb ik vandaag niet meer getest, maar ga ik morgen zeker doen.

Groeten
Antoine

Op 14 april 2003 22:41:36 schreef Antoine:
Ben bang dat je gelijk hebt, ik zal idd eens gaan bufferen, alhoewel ik op de scoop geen inzakkende signalen zie ?

Het gaat erom dat de flank zo snel moet gaan dat alle kloks op het zelfde moment schakelen.

Probeer eens of je de data in het eerste SR correct kan inklokken, evt zelfs door alleen de klok van dat SR aan te sluiten. Dan telkens een SR toevoegen.

Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog

Wouter, ik kan niks loshalen, ze zitten allemaal vast, en ik wil geen sporen vernachelen, vind ik zonde van die print, het heeft voorheen ook altijd gewerkt, dus moet het dat nou ook kunnen :), echter zij het op een andere manier ;)

Zat het voorheen exact zo, met de zelfde uC als driver? Dan was het of marginaal, of je doet nu iets vout in het programma.

Of zat er voorheen een vettere driver voor de keten van SRs?

Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog

Hallo Wouter,

Allereerst, het probleem is opgelost ! :) Alles werkt nu zoals ik het zou willen.

Op je vragen, nee, i.e.i. werd het geheel aangestuurd door een 68000 uC die op een grote kaart zat (voor welgeteld 8 van dat soort printen). En die stuurde uit op een 74HC373, verder kwam de klok bij mij uit een 74HCT00 chipje (waarvan ik het betreffende pootje heb losgeknipt en er mijn draad op aansloot, en die voedde dus die 39 clockingangen.

Afijn, alles werkt zoals ik het wil (tot nu toe), de volgende stap wordt het monteren van een MAX232 voor een seriele link met de PC om het RAM te beschrijven, en vervolgens op het display te zetten.

Bedankt voor de uitleg !

Groeten
Antoine (is nu dolgelukkig :P)

Op 15 april 2003 22:48:25 schreef Antoine:
Allereerst, het probleem is opgelost ! :) Alles werkt nu zoals ik het zou willen.

Maar de hamvraag: wat maakte nu het verschil?

Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog

Kabel lengte was een groot probleem, en het feit dat de carry bit ergens overschreven werd door de AVR, wat inhield dat mijn scanning soms niet optimaal werkte