Shock Media

Navigatie

Terasic MAXII CPLD toepassingen.

Forum > Digitaal > Terasic MAXII CPLD toepassingen.
Naam Bericht
fotoopa

Nu er reeds zovele MAXII modules bij de CO leden zitten zou je toch verwachten dat het hier overloopt van de toepassingen en voorbeelden. Als start dan maar een eerste voorbeeldje gewoon om wat warm te lopen



Zoals te zien op de foto heb ik de buitenste 2 rijen pinheaders bestukt aan de BOVENZIJDE van het MAXII boardje. Hierdoor is deze 2x20 pins connector compatiebel met de DE1 en DE2 board. Dit vereenvoudigd het aansluiten van een interface die dan op alle boarden kan draaien door gewoon even te hercompileren.

Op dit MAXII boardje heb ik momenteel aangesloten:

- een LCD display met een driver voor ofwel 4x20 char ofwel een 2x16 char versie. Je kunt gewoon kiezen door een van de drivermodules mee te linken in de source.
- Een TSOP1738 is ook aangesloten en alle ontvangen codes worden op het display weergegeven op de regel RC5 code = xx
- Er zit een regelbare PWM op aangesloten. De waarde van de pwm kun je verhogen of verlagen door drukknop 1 en 2 De pulsbreedte wordt weergegeven in 2 digits hex op het display PWM=23 bereik gaat van 03 tot $FE De routines zorgen ervoor dat je niet onder de 03 kunt en niet boven de $FE (254) De pwm puls is op de uitgang beschikbaar om een scoop aan te sluiten.
- De module bevat ook nog 12 verschillende clock uitgangen. Die gaan van 1s tot 50MHz in stappen per 10
1s, 100ms, 10ms, 1ms, 100us, 10us, 1us, 200ns, 100ns, 60ns, 40ns en 20ns. Deze pulsen gebruik ik als test signaal voor de scoop waarbij de timing heel precies is. Omdat het mooie blokgolven zijn kun je meteen zien hoe goed je scoop deze waarden weergeeft. ( voor een mooie blokgolf moet je rekenen op een bandbreedte die 5 tot 10 maal hoger is dan je aangeboden signaal) Een scoop met 50MHz bandbreedte zal geen blokgolf weergeven op een 50MHz blokgolf.

Wat moet er nu nog bijkomen?

Ik heb nog een video testgenerator nodig. Dus horizontale sync, vertikale sync en een RGB patroon en dit zoveel mogelijk volgens de standaard norm. Ik ben die timingen aan het verzamelen(zoeken) om dan in de MAXII board bij te steken.

Ik heb ook nog code liggen voor een RX433 ingang signaal voor de KAKU afstandsbediening. Die routines geven alle codes weer op het display.
De routines voor 2 rotary encoders moet ik er ook nog bijplaatsen maar ook die zijn geschreven en getest.
Maar eerst ga ik een kastje bouwen om het geheel in te bouwen.

Enkele extra's zijn nog:
- fet en /of transistor uitgangen.
- enkele ingangen voor photodiodes ( laser detectie)
- een buzer.
- en nog vele andere kleine aangename zaken die ik van jullie verwacht.

Frans.
Update:
Mochten jullie de source willen dan kun je het volledige project hier downloaden Het is een archieve .qar file waardoor je via Quartus direct alles kunt compileren. Mocht er iets mis gaan dan hoor ik het graag. Je kunt het ook al testen zonder de extra hardware aan te sluiten. De leds onboard blinken beurtelinks per seconde en de verschillende signalen kun je al meten met een scoop op de uitgangen. Een voeding heb je ook niet nodig want de USB levert die. Een programmer zit onboard waardoor je enkel Quartus en de .qar file nodig hebt om te testen.
[Bericht gewijzigd door fotoopa op 29 juni 2008 21:05:03]
FPGA voorbeelden , fotoopa Pbase
fotoopa

Ik heb de .pof file ook afzonderlijk beschikbaar gesteld zodat je enkel de file moet programmeren in het MAXII boardje. Deze file staat hier

Sluit eerst het MAXII boardje aan via de USB kabel, start Quartus, selecteer de programmer en via Add File laad je de maxii_display.pof file die je zopas gedownload hebt. Voor de hardware Setup selecteer je USB-Blaster[USB-0]. Mode moet op JTAG staan.Vervolgens zorg je ervoor dat in Program/Configure het bovenste vierkantje aangevinkt staat. Druk op Start om het boardje te programmeren. Voor de details zie onderstaande figuur:



Na het programmeren zullen de leds op het boardje gaan blinken op 1s rate. Op de pinheaders zijn nu de verschillende signalen beschikbaar voor het meten.

De gebruikte pinout staat hieronder:

[Bericht gewijzigd door fotoopa op 30 juni 2008 09:16:41]
FPGA voorbeelden , fotoopa Pbase
free_electron

altera heeft een appnote om met hun cpld touch sensors te maken. ze gebruiken de schmitttrigger input van de cpld in combinatie met een weak pull up om een relaxation oscillator te maken. die vergelijken ze met een pll signaal. kost slechts ene par flipflops om het te doen.

dus geen touch chips van cypress of q-prox meer nodig. map het direct in je cpld.
Professioneel ElectronenTemmer - 8 April 08 : 7.355.303
Jakasol

Frans,
als je de timings zoekt van het PAL signaal, kan je de datasheets van de SAA1043 of de SAA1101 eens bekijken. Hier staat in hoe deze t.o.v. elkaar liggen, met hun specifieke tijden. Ook kan je zien hoe de interlineering tot stand komt.
Dit is bij normaal SD. Mss interessant?
Groeten
Jan
free_electron

een leuk projectje zou zijn een overlay generator.
door middel van een lm1881 zou je de timing van de fpga kunnen genlocken op een bestaand videosignaal.
je kan dan overlay doen bovenop live video.
Professioneel ElectronenTemmer - 8 April 08 : 7.355.303
Nico.c

quote:
Op 30 juni 2008 15:34:25 schreef free_electron:
altera heeft een appnote om met hun cpld touch sensors te maken. ze gebruiken de schmitttrigger input van de cpld in combinatie met een weak pull up om een relaxation oscillator te maken. die vergelijken ze met een pll signaal. kost slechts ene par flipflops om het te doen.

dus geen touch chips van cypress of q-prox meer nodig. map het direct in je cpld.

Heb je toevallig een link naar / nummer van die appnote? Misschien is het voor microcontroller toepassingen ook interessant.
free_electron

Dat cpld gedoe kan je niet met cpu. Je hebt de hardware nodig van de cpld. ( je moet een paar tellers en ene fase comparator maken in de cpld )

Voor microcontrollers heeft silicon labs een appnote. Maar je microcontroller moet wel een comparator met schmittrigger inputs hebben.

AN338 van silabs http://www.silabs.com/public/documents/tpub_doc/anote/Microc.../AN338.pdf

de altera appnote : (was artikel in edn)

http://www.edn.com/index.asp?layout=article&articleid=CA6562582

http://www.edn.com/index.asp?layout=article&articleid=CA6562582
Professioneel ElectronenTemmer - 8 April 08 : 7.355.303
fotoopa

@Jakasol,

Bedankt Jan. Ik heb die datasheets gevonden. Ik weet nog niet of ik het op dat level ga maken. Mijn origineele bedoeling was gewoon HS,VS en de RGB kanalen te sturen. Een volledig PAL signaal maken lijkt mij nogal wat werk. Maar ik ga toch alles eens bekijken. Ik heb dringend nood aan een aantal nieuwe projecten om mijn tijd te vullen anders verveel ik mij

Voor een overlay video systeempje zoals free_electron voorsteld zit er weer heel wat analoog in waar ik weinig kennis van heb. Deze video timing was bedoeld voor een oude vriend die mij zonet een mooie 2 kanaals 50MHz scoop heeft bezorgd. Vandaar dat ik ook al die digitale clock uitgangen op de MAXII board had gezet zodat hij zijn scoop(s) kan testen en vergelijken.

Als er zijn die nog wat idee's hebben om eenvoudige projectjes in de MAXII te plaatsen, laat maar weten. Ik verveel mij de laaste tijd te veel. Maar kom niet af met projecten die een jaar duren. Ik heb hier nog een 20 tal highpower leds liggen waar ik iets "moet" mee doen want ze hebben mij heel veel geld gekost (8 euro per stuk zonder de lenzen) Ik had ze voor mijn fotografie voorzien maar daarvoor hebben ze nog te weinig licht om een highspeed flash te vervangen. Dat met pwm aansturen is niet moeilijk maar je moet een zinvol artistiek design bedenken.

Ik heb wel een draaibank en freesmachine, dus behuizing of complexe stukken maken is opzich niet zo moeilijk. En gezien ik ook de logic analyser heb tot 500 MHz / 34 kanalen kan ik complexe timingen wel aan.
FPGA voorbeelden , fotoopa Pbase
free_electron

probeer dat touch gedoe eens uit.
Professioneel ElectronenTemmer - 8 April 08 : 7.355.303
fotoopa

quote:
Op 1 juli 2008 14:30:51 schreef free_electron:
probeer dat touch gedoe eens uit.

Ik heb een en ander gedownload van Altera met o.a. een uitgewerkt voorbeeld maar het spreekt mij niet aan. Het geheel verbuikt meer dan 400 LE's en om die touch sensors te maken moet je best een pcb layout hebben. Maar ikzelf kan niet etsen en bezit dus geen capacitieve toetsen. Wat een voordeel zou moeten zijn wordt nu een nadeel. Omgekeerde wereld!

Maar ik heb net een andere toepassing gevonden die mij praktischer uitkomt. Ik heb indertijd 5 stuks DS10B20 temperatuursensors van MAXIM gekocht, samen met nog andere CO leden. Ik heb nu die datasheets even uitgeprint en dat is wel een heel mooie brok protocol om uit te lezen. Ik zie dat ze zelfs op 3.3V kunnen werken en een resolutie tot 12 bit uitlezing hebben. Ik heb er 5 stuks, kan ze zelfs allemaal op dezelfde lijn zetten. Dus maar 1 I/O pin nodig!

Ik zal zeker de logic analyser nodig hebben want dit protocol is een mooie brok om in te bijten ( command, alarm instelling, flash programming, write data, read data, 64bit CRC enz). Voila we zijn weer weg voor een paar dagen ( of weken). Wordt vervolgt.
FPGA voorbeelden , fotoopa Pbase
Jochem_S
Golden Member

Toch zijn die touch-sensors leuk. Op de meest onopvallende plaatsen is zo een toets te creëren.

Kijk eens naar de toepassing van Frits Kieftenbelt. Zijn stuk ongeëtste printplaat is ook voor de niet-etser gewoon in de winkel te krijgen, maar het kan natuurlijk ook een ander plaatje metaal zijn, of een reep alu-huishoudfolie wellicht?
Switching Power
Golden Member

@fotoopa Misschien kan je de DS1WM van maxim wel gebruiken om die sensors uit te lezen, dit is een 1wire master in vhdl en verilog.

ftp://ftp.dalsemi.com/pub/auto_id/licensed/ds1wm.zip
Hobby, maar sample met mate. | BumbleBee plus pack | Weerstand calculator voor je PSP | PSN: pietja
fotoopa

@Switching Power,
Bedankt voor de link. Ik heb net alles gedownload voor analyse. Ziet er vrij compleet uit maar wel uitgebereid. Ik ga het even uittesten in zijn origineele vorm en dan zien of er een gesnipte versie kan gemaakt worden zonder alle toeters en bellen en weinig LE's.

@Jochem_S,
Mijn voorkeur gaat toch naar de beste drukknoppen hoor! In het verleden heb ik ook nog van die echte lowcost knopjes gebruikt maar nu zijn het de beste betrouwbare die ik nog koop. Liever wat meer betalen. Eerst iets maken die ik echt kan gebruiken

Update1 betreft DS1WM document Dallas:

Doc is heel mooi en compleet uitgewerkt. Is heel universeel geschreven met een mooie interfacebus om aan een PIC of AVR te hangen. Ik heb het geheel in mijn bestaande design ingebracht en gecompileerd. Deze origineele versie verbuikt 440 LE's. Dit lijkt nogal veel maar als je de volledigheid inrekening brengt valt dit best mee.

Omdat het mijn bedoeling is de DS18B20 temperatuur sensordata binnen de MAXII board te bewerken en op het 2x16 LCD display weer te geven kunnen deze routines sterk vereenvoudigd worden. Zo ook mag de universeele clock divider herleid worden tot de bestaande clock binnen de MAXII module. Ik ga dit verder verwerken tot een praktische oplossing voor het MAXII boardje. De basis werking blijft dan behouden zoals beschreven in het Dallas DS1WM document.

Ik kan het document zeker aanbevelen voor al degenen die iets meer willen weten over de 1-Wire Bus toepassingen.

Update2:

Ik ga toch een eigen verilog routine schrijven en starten voor 1 enkele DS18B20 chip. Reden is dat hij veel eenvoudiger zal zijn met veel minder LE's. Zodra het werkt kan ik verder testen voor meerdere DS18B20 chips op dezelfde lijn. Toepassinen kunnen dan zijn binnen en buitentemperatuur enz. Als ik dit zelf schrijf ervaar ik zelf het gedrag van de chip via scoop en logic analyser metingen. Bovenvermelde documenten helpen mij verder voor de correcte timingen en als algemene leidraad. Ook voor andere gebruikers denk ik dat deze routines nog beter begrijpbaar zullen zijn juist omdat ze beperkend eenvoudig zullen/moeten zijn. Zodra ik hiervan resultaten heb post ik ze wel.
[Bericht gewijzigd door fotoopa op 2 juli 2008 17:06:00]
FPGA voorbeelden , fotoopa Pbase
Mathieuke

Ik heb ook een MAXII micro kit maar ik begrijp er voorlopig niet veel van, het is dan ook compleet nieuw :s
fotoopa

@Mathieuke,

Dat komt nog wel met een beetje oefenen. Ook als er nog wat interfaces voorzien worden zullen er nog meer mogelijkheden zijn.

Zoals beloofd heb ik een temperatuur sensor type ds18B20 aangesloten op het MAXII boardje. Deze sensor gebruikt het 1-wire protocol. Omdat ik daar nog nooit mee had gewerkt heb ik dan maar zelf alles routines geschreven. Als technische documentie heb ik die vanuit de link van "Switching Power" gebruikt ( zie hier enkele post naar boven). Eerst heb ik die origineele complete versie even gecompileerd maar die leekt mij te compleet, universeel en verbruikte 440 LE's zonder de uitlees interface voor de user.

Ik heb vanaf scratch herbegonnen en stap per stap de meest noodzakelijke functie's geschreven. Zo heb ik nu maar 1 sensor op de lijn, dus ik hoef niet te gaan bepalen hoeveel er zijn en welk adres ze hebben. De uitlezing is op 12 bit maar ik heb het resultaat afgerond op 0.1 graad. Als je het nauwkeuriger weergeeft gaat die toch te veel op en neer slingeren op die laatste bit. Ook binair naar BCD moest geconverteerd worden want de uitleesdata is in binaire vorm. Voorlopig heb ik nog geen negatieve waarden ondersteunt maar die zal ik nog wel toevoegen. Gewoon een kwestie van het teken en 2's complement van de data nemen.

Hier het resultaat op de foto:



De voorgaande functie's zitten ook nog in de MAXII board zoals een PWM regeling met digitale uitlezing op het scherm alsook de TSOP1738 RC5 ontvanger voor een AF bediening waarvan ook de code op het scherm getoont wordt.

Ik moet zeggen, het 1-wire protocol zit mooi in elkaar maar is toch iets minder geschikt voor een eerste gebruiker. Ik heb een scoop ter beschikking maar voor de finetune heb ik toch de LA ook gebruikt. Ook moet je enkele malen de flow in de doc gaan lezen om het allemaal te begrijpen. Zonder de juiste commando's komt er niets op het display. Enfin ik heb weer heel wat bijgeleerd. Mijn driver heeft slechts 121 LE's nodig ipv de 440 van de universeele versie. Maar je moogt natuurlijk de functie's niet zomaar gaan vergelijken. Maar voor de MAXII toepassing werkt het uitstekend met mijn versie.

Oef, zit ik nu weeral zonder werk?

ps: Ik heb het volledige project inclusief de driver voor de sensor upgedate in mijn eerste post. Als je nu de versie download heb je meteen alle sources in verilog. het is de beta versie, niet gedocumenteerd ( of toch niet veel) en ook niet geoptimaliseerd maar ze werkt. De bin-bcd convertie routine heb ik ergens gedownload, die is dus niet zelf geschreven maar wat gesnipt voor deze omrekening.
De temperatuur wordt om de seconde gemeten en op het display gebracht.

De logicanalyser is heel praktisch bij de hardware codering van protocols. Het help je vooral bij de controle hoe de bitjes in realiteit naar buiten komen. Hieronder het eenvoudige voorbeeldje hoe de 1-wire device gereset wordt door de master (MAXII board) en waarop de sensor antwoordt met een acknow pulse van hé, hier ben ik



Eens je dan de commando's moet onderzoeken komt het echte werk. Dan is het moment aangekomen om te zien dat eerst de LSB naar buiten gestuurd wordt, de timeslots van het protocol juist zijn, dat alle commando's de een na de andere uitgestuurd worden enz. Kun je met een scoop de init puls nog goed lezen, zonder storage scoop of LA kun je de serieele data niet echt meer volgen. Maar er zijn wel eenvoudiger toepassingen om mee te starten!

Ik heb vroeger al eens een ander voorbeeldje gepost met het MAXII boardje. Het stuurt een gans frontpaneel. Het frontpaneel was voorzien voor de DE1 maar juist omdat de aansluitingen compatiebel zijn voor de I/O connector kon ik dit direct omzetten voor de MAXII versie. Zie foto hieronder:


[Bericht gewijzigd door fotoopa op 6 juli 2008 11:15:34]
FPGA voorbeelden , fotoopa Pbase
fotoopa

Een ander zeer eenvoudig voorbeeld is het maken van een sinuswave. Er was een topic hierover met een PIC : http://www.circuitsonline.net/forum/view/63258

Ik dacht meteen, in zo een MAXII boardje kun je dat direct inprogrameren zonder dat je veel moet aansluiten. Ik heb het opgelost door een lookup tabel te maken van 32 vooraf berekende sinus waarden. De sinusvorm wordt hierdoor via tussenblokjes opgebouwd. Je kunt hem niet vergelijken met een echte heel zuiver sinusvorm maar met een beetje filteren kan hij toch al behoorlijk benaderd worden. Omdat ik nu nog geen R2R ladder aangesloten heb moet ik het doen met de logic analyser. Die meet op de 5 uitgangspinnen de digitale waarde die komt uit de lookup tabel. Op de LA kan ik direct die groepswaarde als een analoge waarde weergeven zodat je het resultaat direct kunt zien. Hierbij de foto van de LA:



Update:

Het stukje verlilog code om dit te genereren staat hieronder:

code:
module sinus
	(
		input			CLK_50,			//	50 MHz
		output	reg [4:0]	sinus_waarde		// 5 bit output
	);

reg	[4:0]	sinus_pointer;       // is een 5bit teller als pointer

always @(posedge CLK_50)
begin
	sinus_pointer <= sinus_pointer + 1;
	case (sinus_pointer)
		0:	sinus_waarde	<= 5'd16;
		1:	sinus_waarde	<= 5'd19;
		2:	sinus_waarde	<= 5'd22;
		3:	sinus_waarde	<= 5'd24;
		4:	sinus_waarde	<= 5'd27;
		5:	sinus_waarde	<= 5'd28;
		6:	sinus_waarde	<= 5'd30;
		7:	sinus_waarde	<= 5'd31;
		8:	sinus_waarde	<= 5'd31;
		9:	sinus_waarde	<= 5'd31;
		10:	sinus_waarde	<= 5'd30;
		11:	sinus_waarde	<= 5'd28;
		12:	sinus_waarde	<= 5'd27;
		13:	sinus_waarde	<= 5'd24;
		14:	sinus_waarde	<= 5'd22;
		15:	sinus_waarde	<= 5'd19;
		16:	sinus_waarde	<= 5'd15;
		17:	sinus_waarde	<= 5'd12;
		18:	sinus_waarde	<= 5'd9;
		19:	sinus_waarde	<= 5'd7;
		20:	sinus_waarde	<= 5'd4;
		21:	sinus_waarde	<= 5'd3;
		22:	sinus_waarde	<= 5'd1;
		23:	sinus_waarde	<= 5'd0;
		24:	sinus_waarde	<= 5'd0;
		25:	sinus_waarde	<= 5'd0;
		26:	sinus_waarde	<= 5'd1;
		27:	sinus_waarde	<= 5'd3;
		28:	sinus_waarde	<= 5'd4;
		29:	sinus_waarde	<= 5'd7;
		30:	sinus_waarde	<= 5'd9;
		31:	sinus_waarde	<= 5'd12;
	endcase
end
endmodule


Hang een weerstand R2R netwerkje aan je uitgangen en je bekomt de analoge trapspanning op de uitgang vout. Zie figuur hieronder.


[Bericht gewijzigd door fotoopa op 7 juli 2008 16:20:23]
FPGA voorbeelden , fotoopa Pbase
Zoeken in topic