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.
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();
}
}
}
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.

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.