loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Op 18 januari 2011 21:00:26 schreef plantrekker:Als je zonder interrutps werkt dan moet de routine die het beeld update (uit eeprom halen / zelf berekenen / ontvangen van pc) elke keer even lang duren, anders krijg je een onregelmatige refreshrate.
Moet lukken, elke keer worden er altijd 8 bytes tegelijk opgevraagd uit het EEPROM, en worden er altijd weer 64 bits weggeschoven in de shiftregisters. Wanneer de cube en print gebouwd zijn kan ik uitsluitsel geven of het echt even lang duurt.
Ik zet trouwens sowieso een max232 PC verbinding aan de PIC, zodat de EEPROM makkelijk gevuld kan worden vanuit de PC. In de PIC komt dus ook een subroutinetje die na indrukken van een knop wacht op data van de PC en die meteen doorstuurt de EEPROM in.
plantrekker
True story bro!
Hmm, ik wou je eigenlijk laten aanvoelen dat interrupts juist hetgene is wat je moet gebruiken. Dan kan je bvb ook data van de pc ontvangen en in de eeprom plaatsen zonder dat je daar iets van merkt bij het refreshen van je kubus. Interrupts zijn echt niet moeilijk en eens je het onder knie hebt, maken ze het je net veel makkelijker, ze bestaan niet voor niets!
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Ik ga binnenkort testen met het tmr1 interrupt, ik denk dat ik het begrijp (datasheet erbij gepakt).
Volgens mijn theorie is timer1 trouwens ongeschikt voor de cube, op prescaler 1:1 is er elke 13mSec. (0,2µ * 65536) een interrupt ,wat te langzaam voor multiplexing is. timer2 lijkt geschikter, die heeft op een prescaler van 1:16 om de 0,8mSec een overflow (0,2µ * 16 * 256).
De onderdelen van Dick Best zijn vandaag binnengekomen:D, dus ik kan beginnen.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Je kunt het maximum, wanneer ie terug naar nul gaat, ergens instellen. Zo kan je ieder aantal microseconden korter dan 13msec maken.
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Je kan zover ik weet alleen de timer zelf op een beginwaarde zetten zodra er een interrupt plaatsvindt.
Update!
De print met de 8 74HC595's is klaar! (gewoon met 1 datalijn
)
Sorry voor de jumpers trouwens
, maar zo is het overzichtelijker.
achterkant:
Ook zijn al 3 van de 8 verdiepingen klaar (= 192 LED's):
loopycoaster zou jij mij misschien kunnen helpen met het schema. Ik ben ook een 8x8x8 LED kubus aan het maken. Ik maak het schema van http://www.boudewijnbruinsma.nl/Led-Cube-8x8x8.pdf
Ik weet niet of jij deze ook maakt? Maar ik zit met die dikke blauwe lijnen. Is hier alles met elkaar doorverbonden of gewoon alles appart?
Ik hoor het wel.
Alvast bedankt.
[Bericht gewijzigd door Guus Berens op (17%)]
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Ik gebruik niet hetzelfde schema als in de instructable. Wel de indeling van de kubus zelf.
Ik heb zelf geen schema gemaakt, er zit er alleen 1 in mijn hoofd, die ik helaas niet via een USB'tje kan overzetten...
Ik gebruik dus 8 74HC595's om de + te schakelen. De 3 datalijnen gaan aan de uC. De 8 - draden van de Led's worden geschakeld door een ULN2003 (transistor array). Die 8 draden gaan ook in de uC.
Wat bedoel je met de blauwe draden. paginanr?
okee toch bedankt.
Ik bedoel die dikgedrukte blauwe lijnen op pagina 35, en dan het rechtse schema. Bedoelen ze daarmee dat al die datalijnen 8x hetzelfde is of is dat allemaal met elkaar doorverbonden.
alvast bedankt
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Het betekent dat de datalijnen parallel zijn aangesloten. Dat wil zeggen dat D0 van de ene chip op de D0 van de andere zit. D1 van de ene zit aan de D1 van de andere. Een wat dikkere (blauwe) lijn is overzichtelijker, anders wordt het een warboel aan lijnen en kruisingen.
okee dank je. Ik merk dat jij hier beter in bent dan mij:P
Ik heb nog een vraag. Misschien is het helemaal niet moeilijk maar ik kom er niet uit.
Zou iemand mij kunnen vertellen hoe het zit met IC4P, IC8P enz. Verder zie ik ook nog JP1, JP2 enz. staan. En die SV1 en SV2 en SV3 zijn dat aansluitingen voor flatcables?
Ik weet niet waar deze voor zijn of waar ze naar toe gaan?
Ik vind het lastig dat het 2 schema's zijn. ik weet niet hoe ik die 2 schema's moet koppelen?
Kan iemand mij helpen?
Alvast bedankt
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Update:
De printen zijn nu beiden klaar (een uC-print en een 595-print), en de cube zelf ook!
kuch*scheef*kuch
:
Deze moeten alleen nog samenkomen in de behuizing, maar die moet nog geverft worden... Tot die tijd ben ik even aan het proberen met de tmr1. Zoals op de foto te zien is zitten er 8 leds (die elk parallel staan met een verdieping). Daarmee heb ik al gezien dat het tmr1 te traag is; de flikkering is duidelijk zichtbaar. Ik heb nu het tmr0 erbij gepakt, en deze flikkerde op een prescaler van 1:256 ook nog, en ik ben het daarna gaan afbouwen. Nu ben ik uitgekomen op een prescaler van 1:32 waarbij hij niet flikkert. Daarmee zou de tijd die 1 verdieping aanstaat uitkomen op:
256*32*(1/(20.000.000/4))= 1638µSec. (~600Hz)
In die tijd moet ik dus alles doen.
Zou iemand mij globaal kunnen vertellen hoe ik dat zou moeten doen met inlezen, aansturen, interrupts ed.? Zelf denk ik dat het zo moet:
pseudocode:
while 1 = 1
data inlezen
data in de 595's schuiven
wachten op de interrupt
wend
interrupt:
595's latchen
flag resetten
terugkeren naar de whileZit ik zo in de goede richting?
(En gaat dat uberhaupt wel lukken in 1638µSec.
?)
kloppertje
Diverse projecten en experimenten: www.elexperiment.nl
Info uit de externe EEPROM lezen kan zo(als je de I2C datalijnen goed hebt ingesteld):
HBusIn %10100001, Data_Adres,[Data]Een HC595 aansturen is ook niet al te moeilijk:
SHOUT DataPin, ClockPin, MSBFIRST, [Bit1\8]
PULSOUT LatchPin, 5 loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Nee, ik gebruik de softwarematige i²C. Maar ik gebruik dus het BUSIN commando.
En voor de 595's, die stuur ik aan met een zelfgemaakte subroutine i.p.v. het SHOUT commando, de subroutine kan ik zo snel zetten als ik wil
.
kloppertje
Diverse projecten en experimenten: www.elexperiment.nl
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
vervanger van SHOUT:
Uitvoer:
FOR Byteselect = 0 TO 7
FOR Y = 7 TO 0 STEP -1
;bd1 = ledbyte[byteselect]
DAT = GETBIT BD1, Y ;het goede databit klaarzetten op de portpin DAT
DELAYUS 50
PULSOUT CLK, 1 ;Clockpuls geven
DELAYUS 50
NEXT
NEXT
PULSOUT LATCH, 1 ;de bytes van een hele verdieping inschakelen
RETURN
Met BUSIN is I²C tot nu toe niet gelukt, wel al met het I2CIN/I2COUT commando. Met deze code heb ik ook meteen gekeken hoeveel tijd een 8-byte array inlezen in beslag neemt:
HSERIAL_BAUD = 38400
HSERIAL_RCSTA = %10010000 ;declares voor serieele communicatie met PC
HSERIAL_TXSTA = %00100000
SYMBOL TMR1IF = PIR1.0 ' TMR1 Overflow Interrupt Flag bit
SYMBOL TMR1IE = PIE1.0 ' TMR1 Overflow Interrupt ESYMBOL TMR1ON = T1CON.0 ' Timer1 ON
SYMBOL TMR1ON = T1CON.0 ' Timer1 ON
SYMBOL TMR1CS = T1CON.1 ' Timer1 Clock Source Select -OP 0 ZETTEN, ZORGT ERVOOR DAT ER GEEN EXTERNE OSSCILATOR NODIG IS.
SYMBOL NOT_T1SYNC = T1CON.2 ' Timer1 External Clock Input Synchronization Control -ALS HIERBOVEN OP 0 IS, WORDT DIT BIT GENEGEERD.
SYMBOL T1OSCEN = T1CON.3 ' Timer1 Oscillator Enable Control -op 0
SYMBOL T1CKPS0 = T1CON.4 ' Timer1 Input Clock Prescale Select bits b10
SYMBOL T1CKPS1 = T1CON.5 ' Timer1 Input Clock Prescale Select bits 00 = 1:1
T1CKPS0 = 0
T1CKPS1 = 0 ;prescaler op 1:1
TMR1ON = 0 ;timer nog niet aanzetten
TMR1CS = 0 ;interne osscilator gebruiken
T1OSCEN = 0
SYMBOL SCL = PORTC.0
SYMBOL SDA = PORTC.1
DIM DATARRAY[8] AS BYTE
DIM RECARRAY[8] AS BYTE
DATARRAY[0] = %10000000 ;even wat data verzinnen
DATARRAY[1] = %01000000
DATARRAY[2] = %00100000
DATARRAY[3] = %00010000
DATARRAY[4] = %00001000
DATARRAY[5] = %00000100
DATARRAY[6] = %00000010
DATARRAY[7] = %00000001
Address = 0 ' vanaf adres 0
I2COUT SDA, SCL, ControlW , Address , [STR DATARRAY ] ' Send the bytes to the eeprom
DELAYMS 100
TMR1H = 0 ;de timer1bytes echt leegmaken
TMR1L = 0 ; " " " "
TMR1ON = 1; de timer inschakelen
I2Cin SDA, SCL, ControlR , Address , [STR RECARRAY ] ; en meteen de bytearray inlezen
TMR1ON = 0;waarna de TMR stopt.
HSEROUT ["TMR1 value: ",DEC (TMR1H * 255 + TMR1L),$D];deze waarde naar de PC sturen
ENDDaaruit volgde een TMR1 waarde van 4520.
4520 * 0,2µSec = 904µSec.
Dan heb ik nog 1638 - 904 = 734µSec. over voor het uitsturen van de data naar de 595's.
hadv
Just find out what you like and let it kill you
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
UPDATE!
De cube is klaar!
Filmpju: http://www.youtube.com/watch?v=w1sNyYFWhWs
De effecten die er nu in zitten zitten nu nog in het interne geheugen van de 16F877A, maar wanneer er meer effecten komen zal ik het externe moeten gebruiken, of een verbinding met de PC moeten maken. Ben benieuwd hoe dat gaat uitpakken.
En wat foto's:
De cube op de behuizing (de zwarte verf is zwarter dan het eruitziet, het glanst een beetje):
Scheef dus
:
De binnenkant met bekabeling:
Nu druk bezig om meer effecten te maken!
hadv
Just find out what you like and let it kill you
Op 1 februari 2011 15:16:20 schreef loopycoaster:
Hoe bedoel je?Zo?
DAT = BD1.YZo krijg ik een error...
Nee, ik bedoel:
Bitwise Shift Left '<<'. Shifts the bits of a value left a specified number of places.
Bitwise Shift Right '>>'. Shifts the bits of a value right a specified number of places.
Dat compileert, als het goed is, naar 1, hooguit 2, instructie(s) en is dus poepie-rap.
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Op 7 februari 2011 18:42:20 schreef Stekke_stim:
Wat is de grootte van die print?
Het zijn 2 experimenteerprints van Dick (10x16cm), wat zorgt voor een totale print van 20x26cm. Ik heb onwijs veel geluk gehad met de kist waar alles in gebouwd is: de prints passen precies naast elkaar, en de prints zitten schuin in de kist, waardoor de adapter nog onder de prints kon komen te zitten.
@hadv: Ik had het gisteren in de proton help file bij GETBIT gelezen ja
, bedankt
.
Ik kaap je topic even met mijn driver voor een 8 * 8 * 8 kubus:
http://dl.dropbox.com/u/699251/blaaaaaaaaaargh.png
Heb er nu al spijt van dat ik de kubus al gebouwd heb... 
Heb mijn versie gemaakt met high-side drivers omdat ik die schuifregisters niet teveel wil belasten en omdat ik een fatsoenlijke hoeveelheid licht uit mijn kubus wil. Maar ik vroeg me af... Is er geen makkelijkere manier?
De behuizing van je kubus ziet er goed uit... Dat moet ik onthouden. 
Waarom overigens zo'n beestachtige micro als de 16F877? Je hoeft, voor zover ik het begrijp, maar 2 kloklijntjes, 1 data lijn en 8 "verdieping"-lijnen aan te sturen...
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Poeh, UDN2981's. Die zijn toch best prijzig? (2-3 euro?)
Het is dat je de cube inderdaad al gebouwd hebt, maar had je anders beter geen ULN2803's achter elke 74HC595 kunnen nemen, en 1 UDN2981 in de highside?
Op 7 februari 2011 23:32:22 schreef TheCrazyInventor:Waarom overigens zo'n beestachtige micro als de 16F877? Je hoeft, voor zover ik het begrijp, maar 2 kloklijntjes, 1 data lijn en 8 "verdieping"-lijnen aan te sturen...
een latchlijn is niet echt een kloklijn trouwens, maar dat terzijde. Waarom een 16F877A? Inderdaad heb ik voor de kubus zelf maar 11 lijnen nodig. Maar dat is niet het enige:
8x verdiepinglijnen
3x 74HC595
2x MAX232 (PC-verbinding)
2x 24LC1025 (I²C EEPROM IC)
4x drukknop (ik heb nog geen echte functies daarvoor bedacht, behalve een testknop (alle leds aan))
3x Status/debug LED's
------------------
22 IO's totaalDat is dus te weinig voor een 16F628A/648A. Op de 16F877A na had ik geen andere PIC's die >18 pins waren. Dus stouwde ik er maar de 16F877A in
.
Het Toshiba equivalent is een stuk goedkoper (TD62783APG). Die heb ik eens op een beurs opgepikt. 5 euro voor 10 stuks.
En je hebt inderdaad gelijk wat betreft IO. Ik denk dat ik er een 16f876 aan ga knopen. Ding heeft genoeg IO voor de kubus + nog wat rand-shizzle.
Ik vind wel dat er nog een controle-LEDje op de led kubus moet...
Op 24 januari 2011 21:17:08 schreef loopycoaster:
Het betekent dat de datalijnen parallel zijn aangesloten. Dat wil zeggen dat D0 van de ene chip op de D0 van de andere zit. D1 van de ene zit aan de D1 van de andere. Een wat dikkere (blauwe) lijn is overzichtelijker, anders wordt het een warboel aan lijnen en kruisingen.
Dat wil dus zeggen dat wat er van SV1 afkomt, bijvoorbeeld pin 14, gaat die lijn naar alle 74HC574N pin 2? Dus gaat de lijn van pin 14 8x naar pin 2 van de IC's?
En is dat zo bij alle lijnen?