kevinonline
ik wil alles weten over pic stap voor stap
hallo
ik ben begonnen met het maken van een display met 24 14 segmens displays.
ontwerp hardware:
het plan is dat ik werk met schuifregisters.
1 16bit voor het neerzetten van het teken op het display,
en een andere om display 1 tot 24 te selekteren (stuurd dus de common kathode aan).
die herdware heb ik reeds op test print staan en werkt.
maar nu gaat het in de software fout.
mijn probleem is als volgd.
ieder karakter bestaad uit 16 bitjes
die heb ik in mijn sram staan opgedeeld in 2 stukjes van 8 bit om aan de 16 te kunnen komen.(24x2=48 sram plekken)
dan moet ik deze serieel gaan weg schijven.
hierbij is de enigst mogelijkheid (tot zever ik weet)om ieder bitje te testen of hij 1 of 0 is en het dan naar het register te schuiven
en nu komt het probleem.
om dat te doen heb ik voor elke bit 4 regels nodig.
dit x 16=64 en dan x 24=1536 regels die je daar voor nodig hebt.
dat past nooit. ik heb maar 1024 regels.
hier moet toch een simpele oplossing voor zijn.
ik weet het niet.
is er iemand die wel wat weet van het serieel sturen van data zonder dat je dat bergen aan ruimte kost.
of zijn er nog knappe koppe die mij een even flink kunnen inspireren voor een goed idee??
ik hoor het wel.
Joszs
Eindelijk mijn site doet het http://home.concepts.nl/~pc106181/Jos/Index.html
k.p.meinesz
Een schizofreen is nooit alleen!
rrf en dan je carry bit testen deze wegschrijven
plaats dit in een lus die 8x doorlopen word met decfsz
movlw 08h
movwf counter
again rrf shifter
btfss status,c
goto zero
call set
x1 decfsz counter
goto again
goto KLAAR
zero bcf destination,0
rlf destination
goto X1
set bsf destination,0
rlf destination
return
en dat dan 4x?
RES
RES
om dat te doen heb ik voor elke bit 4 regels nodig.
dit x 16=64 en dan x 24=1536 regels die je daar voor nodig hebt.
dat past nooit. ik heb maar 1024 regels.
hier moet toch een simpele oplossing voor zijn.
ik weet het niet.
is er iemand die wel wat weet van het serieel sturen van data zonder dat je dat bergen aan ruimte kost.
Dus 24 displays * 14 segmenten = 336 bitjes totaal (voor elk segment 1 bit)
je zet een teller op 336 (lastig) Dus 8 * 42 (2 tellers)
eerst 42 maal dat weer 8 maal.
Dus die 48 bytes SRAM lees je increment uit dan serieel doorklokken in al die schuifregisters.
probleem is dat er je telkens 2 bits mist van een byte.
8
6
8
6
8
6
krijg je telkens. (8+6=14) dus een teller die tot 14 telt mee laten lopen, dan increment doen, dan weer, dan weer. en dit dus 8 * 42 keer totaal dus 336 bits aan segmentendata.
kevinonline
ik wil alles weten over pic stap voor stap
code:
movlw 08h
movwf counteragain
rrf shifter
btfss status,c
goto zero
call setx1
decfsz counter
goto again
goto KLAARzero
bcf destination,0
rlf destination
goto X1set
bsf destination,0
rlf destination
return
kan ik wat meer info krijgen over rrf en rlf.
ik heb wel een idee over hoe het engeveer zit maar ik ben er niet zeker ven.
deze commando's zijn ook niet behandeld in de cursus pic microcontroler.
Jeroen Boere
IF you can't convince them, then confuse them!
kevin, heb je al eens in het datasheet van de pic naar deze instructies gekeken? daar staan ze uitgelegd 
btw, welk type pic gebruik je eigenlijk? gewoon de 16f84/16f628 ??
[Bericht gewijzigd door Jeroen Boere op ]
k.p.meinesz
Een schizofreen is nooit alleen!
Op 16 februari 2004 23:48:29 schreef kevinonline:
[...]
kan ik wat meer info krijgen over rrf en rlf.
ik heb wel een idee over hoe het engeveer zit maar ik ben er niet zeker ven.
deze commando's zijn ook niet behandeld in de cursus pic microcontroler.
ingangen ook niet dusss
rrf rotate right trough file
rrl rotate left trough file
oftewel schuif een byte 1 bit naar links/rechts
rrf meest linkse word aangevuld met een 0 meest rechtse valt af echter deze komt dan in het status register als carry
hetzelfde geld voor rlf alleen dan omgekeerd
de laastste komt dan steeds in carry
deze instructies en de bijbehorende registers sataan allen in de datasheet
kevinonline
ik wil alles weten over pic stap voor stap
oky
ik heb vandaag mijn datasheet weer eens doorgelezen om het verhaal van rrf/rlf te gaan snappen en dat is gelukt.
ingangen ook niet dusss
klopt.
ook en daar ben ik ook me bezig geweest. tot ik dat weer een beetje door had.
maar om even terug te komen op het stuke prog. van: k.p.meinesz.
dat is nu net wat ik nodig had.
nu snap ik ook waarom de commando's eindigen met "through carry"
P.S ik gebruik de 16f84 om al mijn projecten in te maaken die op de planning staan.
Waarom alleen die,zou je kunnen vragen?
nou om alle in en outs te gaan leeren
wijze waarop je software schijft
het snappen en begrijpen van alle commando's en het toepassen van.
enz enz.
als je dat echt gaat begrijpen kun je veel makelijker met andere (groter/kleiner,andere fabrikant) microcontrolers gaan werken. maar ja aangezien werken en slaapen de meeste tijd van de dag opmaken is er wijnig tijd over voor dit.
dus dat duurd nog wel ff.
zoooooo veel te doen en zo wijnig tijd.
k.p.meinesz
Een schizofreen is nooit alleen!
Op 17 februari 2004 19:39:28 schreef kevinonline:
oky
ik heb vandaag mijn datasheet weer eens doorgelezen om het verhaal van rrf/rlf te gaan snappen en dat is gelukt.[...]
klopt.
ook en daar ben ik ook me bezig geweest. tot ik dat weer een beetje door had.
maar om even terug te komen op het stuke prog. van: k.p.meinesz.
dat is nu net wat ik nodig had.
nu snap ik ook waarom de commando's eindigen met "through carry"
P.S ik gebruik de 16f84 om al mijn projecten in te maaken die op de planning staan.
Waarom alleen die,zou je kunnen vragen?
nou om alle in en outs te gaan leeren
wijze waarop je software schijft
het snappen en begrijpen van alle commando's en het toepassen van.
enz enz.
als je dat echt gaat begrijpen kun je veel makelijker met andere (groter/kleiner,andere fabrikant) microcontrolers gaan werken. maar ja aangezien werken en slaapen de meeste tijd van de dag opmaken is er wijnig tijd over voor dit.
dus dat duurd nog wel ff.
zoooooo veel te doen en zo wijnig tijd.
16f628(niet de A versie) is bijna identiek en scheelt toch bijna 3 euro
ik hoefde bij alle projecten alleen een instelling te veranderen(staat ook in de datasheet)
alle commando´s zijn hetzelfde
dus als je voor je vervolg projecten nog geen uC gekocht hebt:-)
goedkope bron: www.voti.nl
Ik ken het tijd probleem helaas ook
succes
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
Op 17 februari 2004 17:13:23 schreef k.p.meinesz:
oftewel schuif een byte 1 bit naar links/rechts
rrf meest linkse word aangevuld met een 0 meest rechtse valt af echter deze komt dan in het status register als carry
hetzelfde geld voor rlf alleen dan omgekeerd
Niet helemaal correct... Als je een register REG noemt met waarde '0001011' er in en je shift deze links of rechts, dan hangt het van de CARRY-bit af welke het resultaat is. Stel:
REG = '0001011'
STATUS, C = 1
rrf REG
-Resultaat:
REG = '1000101'
STATUS, C = 1
REG = '0001011'
STATUS, C = 1
rlf REG
-Resultaat:
REG = '0010111'
STATUS, C = 0
De bitwaarde die in CARRY/BORROW zit, komt op de lege plaats te staan, en de bit die van de file afvalt komt in de plaats in CARRY. Om de waarden in een register origineel te houden moet je na je lus van 8 x rrf de file nog 1 x rrf'en en dan heeft deze terug z'n oorspronkelijke waarde...
groeten, Wiebo
kevinonline
ik wil alles weten over pic stap voor stap
is dit bovenstaand verhaal echt waar??
in de datasheet is het c bit een borrow alleen bij rrf en rlf.
dus mag ik aannemen dat de waarde die er in stond (een 1 of 0) niet word geschreven. of wel?
het zou kunnen nu je dat zecht, maar wat zijn jou bronnen
van dit verhaal?
van hooren zegge of ervaring?!
ik wil dit wel even weten want anders gaat het strax nog fout.
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
ja, dit is echt waar. Als je de datasheet leest ;O) kortweg dus, als je een register links of rechts draait, valt er een bit vanaf en heb je een lege plaats. Op die lege plaats komt de waarde die CARRY had, en de bit die er af valt komt in CARRY.
In feite draai je geen 8 bits als je een register draait, maar 9. Je mag CARRY niet vergeten. De waarde van de C-bit maakt deel uit van het register dat je op dat moment gaat shiften (door rrl en rlf)
Deze ervaring heb 'k zelf al een paar keer ervaren toen 'k serieel data in en uit wou shiften. En geloof me, het is waar, Bron is de talrijke simulaties die 'k achter de rug heb... Ben ne assembler-freak hè 
Veel suc6 nog met je projekten
Groeten, Wiebo
k.p.meinesz
Een schizofreen is nooit alleen!
wat wiebo zegt is waar.
ik ging ervanuit dat het aangevuld werd met 0
omdat ik het geshifte register nooit weer gebruikte
dus de bit die je uitshift komt in carry
de bit die in carry stond komt op de lege plaats
daarom heet het ook carry/borrow
kevinonline
ik wil alles weten over pic stap voor stap
oky erg bedankt voor deze info.
als ik dat niet had geweten was het zeker fout gegaan.ik zal mijn progie effe gaan aanpassen.
thanks.
kevinonline
ik wil alles weten over pic stap voor stap
oke
nu zijn we een paar weken verder en mij prog. werkt.
alleen heb ik nog 1 ding dat opgelost moet worden.
de ledjes van het display branden nu niet fel genoeg.
dit komt omdat het segment 278uS aanstaat en dan word de rest geschreven. nu is het zo dat er door een led +- 20mA mag stromen en dan brand hij helder maar als je zooooon display erg kort laat branden is hij dus niet zo fel.
maar nu komt een stuk van mijn inspiratie voor dit project uit de electuur. (Nr.481 nov 2003 led-lichtkrant)
nu had ik een voorschakel weerstand berekend van 180 ohm bij 20 mA en dat is ook wel goed. voeding is 5V de stroom loopt dan door 2 transistoren (2x 0.7V = 1.4V spanings verlies)hou je 3.6V over bij 20mA is 180 ohm.
en als je dan een led gewoon laad branden doet hij dat ook goed. maar in de electuur gedruiken ze een weerstand van 47 ohm en dan komt de stroom uit op 76mA, een beetje aan de hoge kant voor een led. maarje hij brand dan ook echt maar heeeel even. nu is de vraag of dit nu echt slecht is voor een led die maar ff aan staat of moet ik mijn brand tijd wat verlengen voor het segment.!!!!!
heeft iemand hier verstand van?
ik heb namelijk geen zin om straks anders baken met displays te moeten gaan vervangen.
No_Brain
"What are we going to do tonight, Brain?". "Same thing we do every night, Pinky: try to take over the world!"
Ik heb zo ff geen antwoord op je vraag maar je kunt eens beginnen met de verversingsfrequentie te meten. Zorg dat deze ongeveer 50 Hz. is (dit kun je net niet zien knipperen). Op die manier kun je de leds 't langst aansturen. Met een scoop kun je de frequentie aflezen.
(achteraf vraag ik me af of dit wel zin heeft.........)
k.p.meinesz
Een schizofreen is nooit alleen!
je kun gewoon je weerstand verlagen de totale dissipatie in de led zo minimaal zijn dat dit de led geen schade doet oplopen.
of bereken een condensator zo dat hij ontlaad over led+weerstand in iets minder dan je refresh rate
hierdoor is de led dus net uit als jij hem opnieuw aanstuurd
[Bericht gewijzigd door k.p.meinesz op ]
kevinonline
ik wil alles weten over pic stap voor stap
zoals nobrain zij was een goed idee maar niet voldoende.
je kun gewoon je weerstand verlagen de totale dissipatie in de led zo minimaal zijn dat dit de led geen schade doet oplopen.
dit is erg fijn om te weten. is er hiervoor ook een formule?
of bereken een condensator zo dat hij ontlaad over led+weerstand in iets minder dan je refresh rate
hierdoor is de led dus net uit als jij hem opnieuw aanstuurd
dit is echter onmogelijk in mijn schakeling en heb dit ook nog nooi gezien bij displays(aansturing) maar is wel een goed idee. ik kan dit ook niet gebruiken omdat de displays worden geselecteerd via de common kathode en de rest paralel is doorverbonden.
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
Op 8 maart 2004 21:30:42 schreef kevinonline:
nu had ik een voorschakel weerstand berekend van 180 ohm bij 20 mA en dat is ook wel goed. voeding is 5V de stroom loopt dan door 2 transistoren (2x 0.7V = 1.4V spanings verlies)hou je 3.6V over bij 20mA is 180 ohm.
Dat is niet zo duidelijk. 'k denk dat je ergens een fout maakte, of het verkeerd verteld. 'k leid daaruit af dat je dus 2 transistoren in serie (Basis-Emitter=0,7 Volt) hebt geplaatst, zonder LED? (Ontbrekende 2 Volt). Dan kom je inderdaad een veel lagere weerstand uit zoals in da artikel van Elektuur...
'k heb zo ook eens iets gemaakt, met een 4-digit/7-segment display. Via timer2 werd om de 2ms een volgend cijfer aangeduid. Dus dit gaf een refresh rate van 1/(4 digits x 2ms) of 125 Hz. Totaal flikkervrij
Elk van de 4 digits had 1 transistor, en de led's hangen tussen Collector-Emitter (Dus deze overgangsspanning is te verwaarlozen wanneer de transistor aangestuurd wordt) De stroom was dus 20mA per segment MAAR deze moet je vermenigvuldigen met het aantal Digit's of cijfers, dus x4 = 80mA bij (5 Volt - 2 Volt) 3 Volt. De weerstand was dus 3 / 0,08 of 37,5 Ohm, een 39R'tje was dus ideaal...
Hopelijk helpt deze info wat...
Groeten! Wiebo
kevinonline
ik wil alles weten over pic stap voor stap
klopt wel wat je zecht.
als je de data sheet bekijkt van de ULN2003A (deze zit in mijn schakeling) dan is dat de eerste transistor dan zit er ook nog (in serie) een 2e transistor om de let aan te sturen. de schakeling draaid op 5V en de overgangsspanning (Basis-Emitter=0,7 Volt) die ik bij een test heb gemeten over de transistor was 0.7V per transistor. dit is op deze (lage spanning) niet meer te verwaarlozen. zeker niet wanneer je 24 dislays moet aansturen. de vernieuwings frequentie licht hierbij ook veel hoger.
Dan kom je inderdaad een veel lagere weerstand uit zoals in da artikel van Elektuur...
de weerstand is hoger omdat ik dit berekend heb op een led die brand op een constante dc spanning (de spanning die je over houd na de transistoren). maar omdat ze bij de electuur lagere weersanden gebruiken kwamen de twijfels.
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
Ik denk niet dat je me begrijpt. Heb je een schema? Anders is dat een beetje moeilijk om uit te leggen... Misschien kan je dat op msn eens doorsturen, dan zal 'k wel aantekeningen maken en met gepaste uitleg terug sturen... Groeten,
Wiebo
k.p.meinesz
Een schizofreen is nooit alleen!
Op 8 maart 2004 23:11:29 schreef kevinonline:
dit is erg fijn om te weten. is er hiervoor ook een formule?
p=I² x R x t of P=i² x (u/I) x t
I=amps
R=ohm
t=tijd in seconden
p=joule/sec=watt
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
Op 9 maart 2004 12:48:44 schreef k.p.meinesz:
p=I² x R x t of P=i² x (u/I) x t
I=amps
R=ohm
t=tijd in seconden
p=joule/sec=watt
Wat is dat allemaal, da afgeleide?
)
p=i² x (u/I) x t = wiskundig idem aan p = (I x I x U x t) / I en dus kan je een "I" uit de teller en noemer weglaten, dus: p = U x I x t
Je berekend niet het vermogen P, maar de in totaal verbruikte energie (door het vermogen met de tijd te vermenigvuldigen) Om het vermogen te berekenen is niet meer nodig dan:
P = U x I
P = I² x R
P = U² / R
...
Groetjes, Wiebo
k.p.meinesz
Een schizofreen is nooit alleen!
oh nee je wilt weten hoeveel vermogen er door de led gaat
als deze ipv constand maar x aantal uS aanstaat
dus je hbet weldegelijk de tijdnodig
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
Om het simpel te houden: Er is geen gevaar voor de LED's als de "GEMIDDELDE" stroom niet hoger komt dan 20mA... Maar in dit geval? 24 kolommen? 480mA? Hmmmm....
Deze methode is eigelijk idem als wat bedoeld wordt met vermogen. De regel geld:"Als je 1/24ste van een volledige cyclus door de LED 24x20 mA jaagt, dan licht deze gemiddeld op alsof er een constante stroom doorgaat van 20 mA"
[Bericht gewijzigd door Wiebo op ]