Enkel USB-ansluten display #2

Berätta om dina pågående projekt.
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Enkel USB-ansluten display #2

Inlägg av thepirateboy »

För att visa att det finns fler sätt att styra en standard LCD via USB än detta så är det här ett litet projekt med en billig AVR.

Syftet med detta projekt var att se hur mycket jobb det var att kunna styra nånting via USB
utan att använda en FT232R eller liknande. Lämpligt testobjekt blev en 4x20 standard LCD.
Kan man styra den kan man förstås kontrollera något annat t ex reläer eller vad det nu är man vill styra.

Atmel har en liten krets, AT90USB162 som kostar 4,19 USD/styck på Digikey.
Datablad AT90USB162

Lawicel har ett kort som kostar 250 + moms med denna krets och kortet är tillverkat av Olimex http://www.olimex.com/dev/avr-usb-162.html

Kretsen kommer förprogrammerad med en bootloader vilket gör att man inte behöver någon programmerare,
mycket smidigt! Bootloader aktiveras genom att man håller ner en knapp vid uppstart. När detta är gjort
måste en drivrutin installeras på PC:n. Efter detta använder man FLIP från Atmel för att progga kretsen
med sin applikation.

Bild

Programmering tar ca 1,5 sekunder vid 5kB. Det gör förstås att progga kretsen på
vanligt vis med ISP. Det finns även stöd för bugwire.

Atmel har exempelkod till sitt utvecklingskort STK526 som till vissa delar även fungerar med Olimex-kortet.STK526

Jag har använt koden CDC Virtual Com Port Project, den skapar precis som FT232R en virtuell comport.
Programexempel

Koden från Atmel en riktig griskod enligt mitt tycke. Onödigt många defines gör koden
onödigt svåröverskådlig. Efter att ha rensat bland filerna och skapat ett nytt projekt i Eclipse
lyckades jag se var saker och ting initialiserades. Jag la till två filer som jag själv gjort,
rutiner för lcd-utskrifter.

Displayen kopplades in på PORTB. När initieringen fungerade var det bara att "redirecta" data som skickades
från den virtuella comporten i PC:n till LCD-displayen istället för till uarten på AT90USB192 som den normalt
skickas till.

Simpel förändring av befintlig kod:

Kod: Markera allt

if (Uart_tx_ready())    //USART free ?
      {
         if (uart_usb_test_hit())   // Something received from the USB ?
	      {
	 	      while (rx_counter)
		      {
			      //uart_putchar(uart_usb_getchar());   // loop back USB to USART
			      lcd_put_char(uart_usb_getchar());
			      //Led3_toggle();
		      }
	      }
      }
uart_putchar är bortkommenterad och ersatt av min egen rutin lcd_put_char

Det återstår förstås mycket för att kunna välja rad, rensa display och såna saker,
men syftet med detta projekt var att se hur mycket jobb det var att få igång
någon form av USB-kommunikation. Efter ytterliggare några små programförändringar
och ett litet testprogram i Microsoft VS C# blev resultatet detta.


Bild


Bild

Ett par dagar tog det att få detta att fungera och då har jag "fuskat" och inte läst
en enda rad datablad och inte läst speciellt mycket om kodstrukturen hos programexemplen.
Senast redigerad av thepirateboy 1 augusti 2012, 10:51:25, redigerad totalt 1 gång.
peter555
Inlägg: 6047
Blev medlem: 12 februari 2006, 10:02:22

Inlägg av peter555 »

Intressant, det verkar vara dags att man ger sig på något sånt här och provar. :tumupp:
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Tack för infon! Jag ska väl också ta och kolla på det här någon gång. :)
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Funderat på att använda ful-varianten av USB-stöd för AVR, för att slippa specialkretsarna?
http://www.obdev.at/products/avrusb/index.html
Hastighetskravet är ju inte direkt substantiellt.
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Jo, men samtidigt känns det lite mer seriöst att använda en krets som är avsedd för USB. Nackdelen med AT90USB162 är att den saknar en del finesser såsom AD-omvandlare.
Det kommer dock nya USB-kretsar från Atmel med AD och lite annat lull-lull.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Obdev är väldigt enkelt att få igång och går att köra på nästan vilken AVR som helst. Men så har den två jobbiga krav. Nämligen att man måste anropa usbPoll() minst var 50:e ms och att interrupts inte får vara inaktiverat globalt i mer än någon enstaka klockcykel (hittar inte exakt hur många). Så vill man köra med interrupts så måste interruptrutinerna köras med interupts aktiverade, vilket kan ställa till med problem.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Kul att se fler varianter :)
Billig krets också, även om den är lite begränsad. Finns den att köpa i Sverige? Blev lite glad när jag såg 'min' PIC18F2550 hos Kjell.
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Tror inte den finns att köpa i Sverige förutom hos "grossisterna", tyvärr. Den kanske kommer in hos Lawicel eller ELFA så småningom. Gjorde en snabb jämförelse mellan 18F2550 och AT90USB162 och fördelen med AVR:n verkar vara den förproggade bootloadern. I övrigt verkar 18F2550 ha bättre data på det mesta.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Ok lika obra som vanligt då... man hittar bra kretsar men ingen enkel möjlighet att köpa dem. Och frågan är vad de skulle kosta?
Men att få in en bootloader i en 2550 är inte särskilt svårt, så jag nöjer mig med den, även om den är lite dyr.
Skriv svar