T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
Hallo,
Ik ben bezig met een klein DMX-besturingspaneeltje, wat bestaat uit 5 knoppen, een PIC (de 16f628A, met een krystal van 20 Mhz),en een 75176 RS-485 Ictje. Ik heb het geconstrueerd maar het werkt niet.
En het probleem is: Ik kan alleen controleren of het werkt of niet. Ik heb verder geen geavanceerde apparatuur om te kijken wat er niet klopt. Vandaar mijn vraag: kan iemand een fout ontdekken in mijn schakeling of programma?
Er gebeurd gewoon helemaal niets. of ik de knoppen wel of niet indruk maakt helemaal geen verschil.
Dit is mijn schema:
(de twee lijnen rechts onder zijn de Hot &Cold van de DMX)
Het krystal is 20 Mhz,rechts-midden bij de parralele lijnen zitten de drukknoppen met een pulldown weerstand naar de grond (de knoppen zelf zijn niet getekend ivm de grootte maar dit lijkt me duidelijk zo). Het grote IC is uiteraard de !6f628A en de kleine de 75176.
Mijn programma is hier te vinden:
http://members.chello.nl/g.assies/dmx3.asm
Het is erg groot en dat heeft een reden. In DMX-land (RS-485...) duurt het verzenden van 1 bit 4 us. omdat mijn pic een krystal van 20 mhz heeft loopt dat ding dus op 5 mhz, ofwel: 5 instructies per us. Voor 4 us hoog moet ik dus 4*5 = 20 instructies lang wachten. Vandaar de vele NOP'jes en wachtlussen.
Het idee is: aan het begin stopt hij de waarden van de knopjes in een register, dan wordt de BREAK verstuurd, MAB, Startbit, startcode, stopbit. Startbit, Chanel1 data, stopbit. etc. precies zoals het hoort dus. Ik zie geen fouten in mijn schakeling of programmatuur.
Iemand anders wel??
(is er trouwens een goed programma om code te simuleren? het liefst met schakeling natuurlijk maar het lijkt me sterk dat zoiets bestaat)
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Ik denk dat het een foutje in de tekening is, en dat het in het echt wel goed is, maar in ieder geval: de PIC zit niet aan massa. Verder zie ik geen ontkoppelcondensators zitten op de voedingsspanning.
In MPLAB kun je (beperkt) simuleren. Je kunt stimuli (signalen of knoppen) toevoeren en kijken wat het resultaat is.
[Bericht gewijzigd door Fuzzbass op ]
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
Op 21 februari 2005 18:49:28 schreef Fuzzbass:
Ik denk dat het een foutje in de tekening is, en dat het in het echt wel goed is, maar in ieder geval: de PIC zit niet aan massa. Verder zie ik geen ontkoppelcondensators zitten op de voedingsspanning.In MPLAB kun je (beperkt) simuleren. Je kunt stimuli (signalen of knoppen) toevoeren en kijken wat het resultaat is.
Nee dat is een foutje in mijn schema. dat ding hangt uiteraard aan de Massa
. Waar moet ik die condensator tussen fietsen? Ik zie erg weinig schema's waarin die gebruikt is. Dus het lijkt me sterk dat dat de oorzaak is?
Die beperkte simulatie ken ik. Die heb ik ook gebruikt. een input hoogmaken en dan kijken welke waardes er in welke registers zitten. ik heb daar geen foutjes in de code meer gezien...
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
Ik heb mijn code geupdate, ik heb veel meer commentaar toegevoegd omdat het voor anderen niet te lezen was. Maar ik liep wel ergens tegenaan:
BCF PORTA,0 ; startcode
NOP ; 1 cycle
NOP ; 1 cycle
MOVLW 35h ; 1 cycle
MOVWF teller1 ; 1 cycle
loop2 DECFSZ teller1,1 ; 1 cycle * 52
GOTO loop2 ; 2 cycle * 52
;------------- +
; 160 cycles = 8 bits
op deze manier ben ik precies 160 cycles bezig. Maar nu mijn vraag, die regel van GOTO, neemt die wel 2 cycles in beslag? anders zou dat betekenen dat mijn break, startcode en channeldata dus 1/3e te kort duren, wat het probleem zou verklaren.
De Goto is 2 cycles, hou er trouwens rekening mee dat de skip (in een btfss instructie) ook een extra cycle kost als je skipt (dan is het een 2 cycle instructie). Ik weet niet hoe kritisch die DMX timing is maar hou je ook rekening met de instructies die tussen de bitjes en loopjes staan ?
Trouwens: In MPLAB kan je de timing controleren met de stopwatch in de debugger. Volgens mij zit je er af en toe een cycle of wat ernaast (Maar heb ik niet getest).
Je zou het wat kleiner kunnen krijgen door de delays met subroutines te doen, hoef je ook maar op een plaats de handel aan te passen bij fouten in de timing ipv op een heleboel. (hou wel rekening met de call/return die ook weer 4 cycles opeten)
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
ik heb het uitgeteld vanaf het moment dat het hoog of laag is, precies uitgerekend. Maar stel ik doe een:
BSF PORTA,0
is bit 0 dan geset NA de instructie of moet ik de instructie meetellen als cycle?
Op 21 februari 2005 21:53:08 schreef T.Assies:
is bit 0 dan geset NA de instructie of moet ik de instructie meetellen als cycle?
Dat gebeurt (uit mijn hoofd) in Q3 van de instructie, maar dat maakt niet uit aangezien je exact dezelfde vertraging hebt in de set als in de clear.
Wel heb ik de timing effe nagelopen, en af en toe zit je er een (heel) klein beetje naast
1) DMXout is .4 usec te lang (weet niet of dat erg is), dat komt door de movlw c8h en movwf teller1 instructies.
2) in de startcode, de loopcount moet 34h zijn, niet 35h (is nu .6 usec te lang)
3) Voor de chan code hetzelfde als (1), je vergeet de 2 instructies mee te tellen.
en zo verder...
Het zijn maar kleine verschillen en misschien maakt het niet uit.
Heb je trouwens met een voltmeter het "rust" nivo nagemeten. Ik ben eens op mijn bek gegaan door gebruik van een inverting IC (zoals de MAX232), moesten dus alle 1-tjes en 0-tjes omgedraaid worden.
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
hmm dat heb ik nog niet gemeten. Je bedoelt hoe hoog het signaal is aan de output van de pic?
Verder: in de simulatie, welke snelheid moet ik invullen. De snelheid van het krystal of de daadwerkelijke snelheid van de pic? Dus: 20 mhz of 5 mhz?
de verschillen heb ik iets aan veranderd. Ik heb 2 NOPjes weggehaald zodat het wel precies uitkomt. Verder duurt het versturen van 1 bit 4 us. dan lijkt .4 us me niet het probleem ?
Maar bij de chan loopt hij in het ergste geval dus 1 cycle scheef. want als een chan laag is voert hij BSF PORTA,0 niet uit, en als dat register hoog is wel. dat is dus 1 cycle verschil. Maar dat kan toch nooit het probleem zijn...
[Bericht gewijzigd door T.Assies op ]
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
Ik heb nu iets heeel raars. Ik ben aan het testen geslagen met een simpele dmx tester ( xlr plug met ledjes). En een programma wat alleen dit doet:
BSF porta,0
BCF porta,0
dit zou dus heel snel knipperen moeten worden.
1 ledje brand continu, de andere niet. het ligt dus aan de hardware. MAAAAAAAR wanneer ik mijn vinger tegen het crystal hou werkt de pic goed, laat ik deze los werkt het niet??
Wat kan dit veroorzaken?
Kristal stuk, wat gebeurt er als je het Xtal huis aan aarde legt?
Beide c's maken goed contact?
MvgEat
Welke waarde heb je de C's gegeven, en liggen ze wel goed aan ground? Aardpunt ook goed gekozen op de gnd. van de PIC?
EDIT Eat was me voor.......
[Bericht gewijzigd door KT88 op ]
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
het crystal is 20 mhz, maar ik heb er ook al 1 van 16 mhz geprobeerd. ik heb condensatoren van 22 en 20 pf geprobeerd, werkt allemaal niet. ik heb alle aardlijnen gecontroleerd, ik heb het huis van de crystal aan de aarde gelegd en ik heb alles nagemeten. alle aardes liggen goed aan elkaar. Wat kan dan in godsnaam het probleem zijn? Als ik mijn vinger op de schakeling leg gaat het goed, haal ik hem weg gaat het fout, maar het is niet perse dat er iets contact dan maakt. als ik de soldeerbout tegen een pootje hou kan hij het ook al doen... ik ben verbaasd???
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
haha mensen het werkt! Het probleem was de HS instelling. Ik heb toen ik begon met PIC's geleerd dat die altijd op XT moest staan maar blijkbaar dus niet. Kan iemand mij precies uitleggen wat dat alles betekend?
Maar verder werkt het goed! de DMX tester knippert er lustig op los en wanneer ik een knop indruk voor een lamp zie je het knipperpatroon veranderen. Morgen kan ik het testen op een echte dmx installatie!
HS = High Speed Xtal > 4 MHz, laatste weet ik niet zeker. Instelling bepaalt de versterking tussen de osc. pins.
Zeker weten? Make love with the datasheet!
MvgEat
[Bericht gewijzigd door Rd12tf op ]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik heb toen ik begon met PIC's geleerd dat die altijd op XT moest staan maar blijkbaar dus niet. Kan iemand mij precies uitleggen wat dat alles betekend?
Het lezen van de datasheet kan soms wel eens nuttig zijn... 
Hee, bekend probleem.
Ook wel weens een 20MHz kristal vervangen door een 4 MHz en toen werkte het ook niet meer. Je moet inderdaad de oscillator goed configuren voor het kristal wat je gebruikt.