Zo .. in één keer een heleboel reacties ..
't display hangt niet aan m'n computer maar aan een pic(je) de 16F877A
Ik heb de volgende lijnen aangesloten op de Pic:
Clock
Strobe
Enable
Serial data bovenste rij
Serial data onderste rij
A0 )
A1 ) uit de waarheidstabel in de datasheet zijn de combinaties af te leiden hoe je de darlingtons/rijen aanstuurt
A2 )
Een klein stukje uit de code:
A2 = 0 : A1 = 0 : A0 = 0
SHout data_up,Clock,MSBFirst,[%01000101,%11110100,%01000000,%00000000]
enable_ = 0
Pulsout Strobe,1 ' latch to output register
delayus delay
enable_ = 1
Eerst ze ik de selectielijnen voor de rijen goed, vervolgens schuif ik de data voor elk display erin (moet voor zowel boven als onder apart) Dan de Enable aan (active Low) Strobe pulsen dan komt alles op het scherm en dan de Enable weer uit.
Nu moet ik alleen voor elke rij & kolom dit zelfde stukje code weer schrijven, en volgens mij moet dit veel makkelijker kunnen ?
Door de data ergens in een tabel oid neer te zetten en dan uit te lezen, maar hoe !?
Heeft iemand misschien een stukje code of uitleg hoe ik dat doe in Picbasic ?
Nog vorderingen gemaakt met het aansturen? Ik heb zelf nauwelijks ervaring met Pic'jes en 't programeren hiervan. Maar de outputs van je Pic communiceren nu met je matrix in elk geval, wat verlangt het matrix voor input? dit snap ik nog niet helemaal uit je verhaal.
Zelf ben ik nog steeds aan het mailen met Baco, zij zijn ook aan het uitvogelen hoe ze dat ding aan de praat krijgen, om vervolgens die info op de site te zetten.
Ik heb nog geen displays besteld, maar als ik meer info heb zou ik graag een lichtkrant willen maken van 5 gekoppelde matrices, zodat de afmetingen 125x12cm worden. Heb je al meerdere panelen kunnen koppelen?
Ik heb ondertussen ook beeld gekregen op 1 scherm. Ben nog aan het denken hoe ik de verschillende shift patronen ga maken. Maar de displays werken, zoals hierboeven al werd uitgelegd.
2 x data in (bovenste en onderste rij
1 x clk
1 x strobe
1 x output enable
3 lijen voor selectie van rij
Ga vanavond eens proberen met meerde displays achter elkaar. (heb nu de flatkabeltjes klaar). Ik verwacht hier geen problemen. Gewoon j2 verbinden met j1 van volgend display.
(doe het trouwens met een AVR)
Doorverbinden is inderdaad 'kinderwerk' zoals driessens_nl dat ook al zegt ! Helaas is mijn 2e display niet helemaal goed want een aantal rijen staan altijd open/aan
Heb zelf nog niet echt vorderingen gemaakt, maar ben er dan ook niet meer mee bezig geweest ..
Zit nu eigenlijk een beetje vast omdat ik nog steeds op zoek ben naar \/
Nu moet ik alleen voor elke rij & kolom dit zelfde stukje code weer schrijven, en volgens mij moet dit veel makkelijker kunnen ?
Door de data ergens in een tabel oid neer te zetten en dan uit te lezen, maar hoe !?
Heeft iemand misschien een stukje code of uitleg hoe ik dat doe in Picbasic ?
Baco zou inmiddels al wel moeten weten hoe het aan te sturen is ! want al deze informatie heb ik ze even toegestuurd.
Dillemma... omdat ik dus geen ervaring heb met Pic's heb ik vandaag is zitten lezen op Voti.nl en picbasic.nl. Hoe zouden jullie dit aanpakken? een galva wisp of wisp648 gaan bouwen --> 16F877 kopen --> en gewoon gaan programmeren etc etc? Hoe hebben jullie je dit eigen gemaakt?
Ik neem aan de je de 16f877 ook steeds in-circuit programmeerd en de 8 outputs van de chip verbonden zijn met het display. Welke software gebruik je hiervoor? Het lijkt me mooi om mezelf dit aan te leren en tot een werkend resultaat te komen, maar moet nog even het vertrouwen hebben dat dit ook mogelijk is. Wie helpt!?
MAH
Every machine is a smoke machine if you operate it wrong enough
wel, alles is mogelijk. Picbasic is het meest gebruikt door beginners. wanneer je meer ervaring hebt kan je overstappen op C of ASM.
hoe leer je het? door te lezen en te doen. eerst niet al te moeilijk beginnen. dan komt de rest vanzelf. Ook wat programmatjes in dezelfde taal opzoeken van anderen om de kunst wat af te kijken. Als je er niet meer uitkomt kan je hier altijd vragen.
Ik heb net aan de hand van wat ik hier gelezen heb een stukje C code (sourceboost) geklopt, die een buffer naar de displays zou moeten sturen.
Deze code is voor één display unit, voor meer display units zouden de buffers 32 bytes langer moeten zijn per unit.
Elke byte in de buffer is een kolom (boven naar beneden op het display)
Ik heb hier geen display liggen om te testen, heb de code ook naar veenie gestuurd, misschien heft die er nog één liggen om te testen.
Ik ben voor de code uitgegaan van de volgende aansluiting (en pin functies):
PORT B:
7 STROBE - Kopieert ingevoerde data naar display buffer. (per rij of voor hele scherm?)
6 ENABLE - Zet display aan/uit. Geen invloed op buffers
5 CLOCK - Klok de data naar binnen voor de geselecteerde rij
4 DATA_TOP - data bit in voor bovenste rij
3 DATA_BOT - data bit in voor onderste rij
2 AN2 - \
1 AN1 - > Selecteer rij. .. e.v. pin indelign omdraaien afhankelijk van waarheidstabel.
0 AN0 - /
De C code:
#define DATA_TOP 4
#define DATA_BOT 3
#define ENABLE 6
#define STROBE() set_bit(portb,STROBE); clear_bit(portb,STROBE)
#define CLOCK() set_bit(portb,CLOCK); clear_bit(portb,CLOCK)
#define ADDRESS [adress_port]
// Buffer arrays waar je de afbeeldingen in kwijt kan.
// Voor elke kolom één byte (omdat BoostC niet lekker met 2D arrays werkt)
char buffer_top[32]; // Voor de top regel
char buffer_bottom[32]; // Ook voor de bottom regel
// Deze functie kopieert één rij data uit de buffer naar het display.
void Copy_Row(char row)
{
char col; // colom teller
portb &= 0xF8; // maak de Adres pinnen 0, en laat de rest in tact
portb |= (row & 0x07); //zet het adres voor deze rij erop
set_bit(portb,ENABLE); // uitvoer tijdelijk uit
for(col=0;col<32;col++)
{
// kopieer de bit voor de top naar de data pin
if(test_bit(buffer_top[col],row))
set_bit(portb,DATA_TOP);
else
clear_bit(portb,DATA_TOP);
// kopieer de bit voor de bottom naar de andere data pin
if(test_bit(buffer_bot[col],row))
set_bit(portb,DATA_BOT);
else
clear_bit(portb,DATA_BOT);
// en clock ze naar binnen
CLOCK();
}
// strobe de hele rij naar de buffer:
STROBE();
clear_bit(portb,ENABLE); // uitvoer weer aan
}
char row = 0; // global variabele
void interrupt()
{
if(test_bit(pir1,TMR1IF))
{
clear_bit(pir1,TMR1IF);
Copy_Row(row);
row++;
if(row > 7)
row = 0;
tmr1h = [iets];
tmr1l = [iets];
}
}
In deze code wordt een timer gebruikt om iedere paar honderd microseconden de volgende rij aan te sturen.
De timer initializatie code heb ik weggelaten
[Bericht gewijzigd door kmn op (23%)]
Ok, misschien haal ik er vandaag nog wel 1tje op om te testen. Alleen balen dat ik sinds mn nieuwe pc geen serieele en parallelle poort meer heb. (Voor wisp en AVR Kanda dongle)
Wordt dus eerst nog een usb->ser/par converter kopen.
Ik heb even snel in C18 een programma geschreven om het display aan te sturen. Het is geen hoogstaand programmatuur maar het gaat er even om dat het werkt. Het werkt helemaal zonder timers e.d. dus puur even voor het idee.
De volgende pinnen moeten worden gedefinieerd:
A0
A1
A2
CLK
SDB
SDO
Enable
Strobe
while(1)
{
//Raise line counter
counter++;
if(counter&0x08)
counter = 0;
//Disable display
Enable = 1;
//Set address
A2 = counter&0x01;
A1 = !!(counter&0x02);
A0 = !!(counter&0x04);
//Shift in 32 bites
for(i=0; i<32; i++)
{
//Get data from array's
SDB = !!(display_upper[i]&(1<<counter));
SDO = !!(display_lower[i]&(1<<counter));
//Clock data in
CLK = 1;
CLK = 0;
}
//Enable display
Enable = 0;
//Latch data
Strobe = 1;
Strobe = 0;
//Wait
Delay10KTCYx(3);
}
Deze code is getest en werkt . De wait op het einde is voor een processor die op 48MHz loopt. Als je processor trager is mag hij korter.
Sprite_tm
Relaxen und watchen das Blinkenlichten
Ik hoop dat de mensheid hier niet al te hard neerkijkt om cross-forum-posts te doen maar misschien is het ook voor jullie interessant om dit topic op GoT eens te bekijken. Samenvatting: het is me gelukt om monochrome beelden (='grijs'tinten) weer te geven op het board. Sourcecode staat erbij en is gelicenseerd onder de GPLv3, dus copypaste away.
Zeker leuk topic op GoT ook, houden we ook in de gaten.
Wat voor programmer gebruiken jullie om een pic te programeren, ik neem aan dat iederen in-circuit-programmers gebruikt. En dan bijvoorbeeld een galva-wisp van picbasic.nl of de wisp van Voti?
Ik heb inmiddels beide topics (hier en op GoT) gelezen en in blind enthousiasme 5 van die dingen besteld
Vanmiddag zijn ze gearriveerd en het ziet er erg leuk uit.
Maar nu de aansturing.. ik ben een absolute beginner wat betreft microcontrollers. Het lijkt mij echter niet heel ingewikkeld om mbv een wisp en picbasic iets zinnigs op de displays te krijgen.
Kern van mijn verhaaltje is eigenlijk het volgende:
1. kan ik met de genoemde wisp en picbasic daadwerkelijk iets bereiken op de displays?
2. Welke Pic kan ik het beste of gemakkelijkste gebruiken?
Doel; ik wil er eigenlijk in beginsel een lichtkrant van maken. Misschein dat ik er later nog andere effecten in wil stoppen, maar gewoon een paar teksten laten zien vind ik al een prima begin.
Ik zie ook graag wat jullie er al mee bereikt hebben
Rob.
klein is fijn
Moderator
Een ding is zeker, je moet ze niet kopen om de matrixen te desolderen. Op het moment dat de print begint te verkolen willen ze net loskomen..
/edit, flink stoken met de soldeerbout op 350°C lijkt te werken.
[Bericht gewijzigd door klein is fijn op (20%)]
@Sprite_TM, er is altijd weer baas boven baas ... leuk topic @ Got .. ik doeje dat zo niet even na !
@disaster, ik had hierboven het belangrijkste stuk code gepost maar hierbij nogmaals.
A2 = 0 : A1 = 0 : A0 = 0
SHout data_up,Clock,MSBFirst,[%01000101,%11110100,%01000000,%00000000]
enable_ = 0
Pulsout Strobe,1 ' latch to output register
delayus delay
enable_ = 1
@geronimoos, ik maak inderdaad gebruik van een wisp een zelfgemaakte kopie de wisp628 van voti.
@Rob W. hetgene wat ik hier gepost heb heb ik bereikt met alleen een wisp, picbasic en wat geduld. Ikzelf heb gebruik gemaakt van de PIC16F877A keuze van de Pic is erg afhankelijk van wat je allemaal wilt gaan doen.
@Kif, als het alleen om de matrixen gaat .. waarom dan niet de print er omheen wegzagen/slijpen ? desolderen gaat dan een stuk makkelijker !
Thanks ik heb eea besteld en verheug me ermee aan de slag te gaan.
@KiF; ik heb vanmiddag nog 1 van die matrixen los gehad. Het bijbehorende weerstandsnetwerk was defect. (in tweeën gebroken)
Ik heb daarna de matrix ook maar even losgehaald door hem pootje voor pootje los te maken met een simpele desoldeerpomp. De bout op 300 graden en dat ging prima.
ik heb ook zo'n display gekocht. heeft iemand ook een voorbeeldje in picbasic hoe ik het display aanstuur?
zelf weet ik niet echt goed hoe ik moet beginnen.
Als je dit topic doorleest moet je als het goed is genoeg info hebben om te beginnen .. pinouts en stukken code heb ik gepost ..
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
op deze foto can sprite kun je alle IC's duidelijk lezen. (misschien even met brichtness/contrast van je scherm spelen, maar alles is te lezen)
http://meuk.spritesserver.nl/foto/foto/misc8/img_3286.jpg
Ik heb ook zitten twijfelen over zo'n bordje, maar ik weet niet echt een nuttige toepassing en heb een vrij lange todolist...
Even wat linkjes van zo'n boardje.
Weliswaar niet allemaal even nuttig, maar wel leuk om even mee te spelen.
http://www.youtube.com/watch?v=urecCnv37J8
http://www.youtube.com/watch?v=eOFIvk9vrNY (PACMAN)
http://www.youtube.com/watch?v=zmusSxxcvxg (LICHTKRANT)
hallo
Ik heb nu ook zo'n display en heb de code van "help" overgenomen en dit werkt tot zo ver.
Maar hoe krijg ik nou pixels brandend op de 2e rij ? door a2 a1 en a0 te veranderen toch ?
ik heb ze veranderd in A0 1, A1 0, A2 0
maar er komt niets op een volgende lijn te staan maar gewoon op de 1e lijn
Tommyboy
Zo goed als het vroeger was, is het nooit geweest.