Die Zeiten der parallelen Schnittstelle sind vorbei. Wenn man 'Bits vom PC aus kontrollieren' möchte, bleibt eigentlich nur eine Ansteuerung per USB. Wofür braucht man diese Bits
Bei anderer Gelegenheit hatte ich mich schon einmal mit USB beschäftigt und bin auf das Konzept der Virtuellen USB-Schnittstelle für AVR Mikrocontroller von Objective Development gestoßen (s. auch USB Werkstatt). Wegen des geringen Aufwands (preiswerte und vor allem bekannte Hardware) habe ich ein USB-12-Bit-IO-Modul auf Basis dieses Konzepts entwickelt.
Als AVR habe ich einen ATtiny 2313 gewählt. Dieser Chip ist zum einem klein, einfach und preiswert. Hat zum anderen aber genügend große Anzahl von IO-Pins. Zieht man die notwendigen Pins für die Quarz-Stabilisierung, USB und den Reset ab, bleiben 13 freie Leitungen. Das gibt 12 frei schaltbare I/O-Pins und eine für eine LED für Signalfunktionen.
Funktionsweise:Das Layout. Die original Eagle-Dateien.
Das zugehörige Programm als AVR-Studio-Projekt (korrigierte Version vom 30.5.2011. Bei der vorherigen Version ließ sich PORTD nicht abschalten). Als Basis diente das Templates aus der USB-Werkstatt.Anzupassen sind die Funktion DoAction, die nach einer vollständigen Datenübertragung aufgerufen wird:
void DoAction(void) //Pufferinhalt analysieren und Aktion durchführen
{ switch(buffer[1])
{ case 0: //LED on/off
if(buffer[2]) // invertiert!
PORTD &= ~(1 << BIT_LED);
else
PORTD |= (1 << BIT_LED);
break;
case 1:
DDRB = buffer[2];
break;
case 2: ...
Und die Funktion usbFunctionSetup, die Daten für die Übertragung zum PC bereitstellt:
...
{ case USBRQ_HID_GET_REPORT:
replyBuf[0] = 1; // ReportID
replyBuf[1] = DDRB;
replyBuf[2] = PORTB;
replyBuf[3] = PINB;
...
PC-Interface zum Download (Source, Binary). Bis auf die UserControls zur Anzeige der Bits enthält der Code nichts Besonderes.