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:

SchaltplanDer übersichtliche Schalplan.

Layout Lötseite Das Layout. Die original Eagle-Dateien.

So sieht es aus  So sieht's aus.

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;
       ...

Screenshot PC-Interface zum Download (Source, Binary). Bis auf die UserControls zur Anzeige der Bits enthält der Code nichts Besonderes.