Firmware zum Download

Ok, der Singalpegel der USB Datenleitung beträgt maximal 3,6V. Dann benötige ich also die 3,3V Variante des ATMega, oder?
Phil

Hallo Phil,

der Signalpegel der USB Datenleitungen ist 3.3V und du benötigst daher den Spannungsregler.

Es gibt IMHO keine eigene 3,3V Variante - die Operating Voltage des Atmega32A beträgt 2.7V - 5.5V.

Die ältere Version (Atmega32) gab es in zwei Varianten - einmal mit 2.7V - 5.5V (Max 8MHz) und einmal
mit 4.5V-5.5V (Max 16MHz). Bei normaler Umgebungstemperatur werden aber alle drei Varianten mit 3.3V
und 12MHz problemos funktionieren. Kritischer wird es wenn die Umgebungstemperatur in Richtung -40°C oder +85°C geht.

LG
 
@lupo


Was muss ich am Sourcecode ändern um für Joy1 und Joy2 6 Buttons zu aktivieren.
Ich Vermute das ich die "hid_input_mapping.c" anpassen muss. Aber wie?

Danke schon mal...

Achso ich habe die Atmega32 Version.

Hallo plutoonline!

Folgende Änderungen sind notwendig (ohne es jetzt ausprobiert zu haben):
Download Firmware Version 1.1
In der Datei avr.h von 3 Joysticks auf 2 Joysticks umstellen:
Code:
#elif defined __AVR_ATmega32__

#  define NR_OF_JOYSTICKS 3
#  define USE_MOUSE_DEVICE 1
ändern auf
Code:
#elif defined __AVR_ATmega32__

#  define NR_OF_JOYSTICKS [B]2[/B]
#  define USE_MOUSE_DEVICE 1
Jetzt gibt es anstatt 3 Joysticks nur mehr 2 Joysticks und die Pins vom Joystick 3 sind frei für die zusätzlichen Buttons.
In der Datei hid_input_mapping.h wird die Pinzuordnung festgelegt:
Code:
// Atmega32 Shift switch off
PROGMEM const unsigned char NormalMapping[NUMBER_OF_INPUTS] =
{                       //  Pin Atmega  Board   Function
    KEY_5,              //  40  PA0     X6-1    COINTRIGGER
    KEY_2,              //  39  PA1     X4-8    JOY2START
    J2_Button3,         //  38  PA2     X4-7    JOY2BUTTON3
    J2_Button2,         //  37  PA3     X4-6    JOY2BUTTON2
    J2_Button1,         //  36  PA4     X4-5    JOY2BUTTON1
    J2_Right,           //  35  PA5     X4-4    JOY2RIGHT
    J2_Left,            //  34  PA6     X4-3    JOY2LEFT
    J2_Up,              //  33  PA7     X4-2    JOY2UP
    0,                  //   1  PB0     X9-2    SHIFTSWITCH
    0,                  //   2  PB1     X7-1    MOUSEXCLOCK1
    0,                  //   3  PB2     X7-2    MOUSEXCLOCK2
    0,                  //   4  PB3     X8-1    MOUSEYCLOCK1
    0,                  //   5  PB4     X8-2    MOUSEYCLOCK2
    J3_Down,            //   6  PB5     X5-1    JOY3DOWN
    J3_Up,              //   7  PB6     X5-2    JOY3UP
    J3_Left,            //   8  PB7     X5-3    JOY3LEFT
    J1_Up,              //  22  PC0     X3-2    JOY1UP
    J1_Left,            //  23  PC1     X3-3    JOY1LEFT
    J1_Right,           //  24  PC2     X3-4    JOY1RIGHT
    J1_Button1,         //  25  PC3     X3-5    JOY1BUTTON1
    J1_Button2,         //  26  PC4     X3-6    JOY1BUTTON2
    J1_Button3,         //  27  PC5     X3-7    JOY1BUTTON3
    KEY_1,              //  28  PC6     X3-8    JOY1START
    J2_Down,            //  29  PC7     X4-1    JOY2DOWN
    J3_Right,           //  15  PD1     X5-4    JOY3RIGHT
    J3_Button1,         //  17  PD3     X5-5    JOY3BUTTON1
    J3_Button2,         //  18  PD4     X5-6    JOY3BUTTON2
    J3_Button3,         //  19  PD5     X5-7    JOY3BUTTON3
    KEY_3,              //  20  PD6     X5-8    JOY3START
    J1_Down             //  21  PD7     X3-1    JOY1DOWN
};
ändern auf z.B.
Code:
// Atmega32 Shift switch off
PROGMEM const unsigned char NormalMapping[NUMBER_OF_INPUTS] =
{                       //  Pin Atmega  Board   Function
    KEY_5,              //  40  PA0     X6-1    COINTRIGGER
    KEY_2,              //  39  PA1     X4-8    JOY2START
    J2_Button3,         //  38  PA2     X4-7    JOY2BUTTON3
    J2_Button2,         //  37  PA3     X4-6    JOY2BUTTON2
    J2_Button1,         //  36  PA4     X4-5    JOY2BUTTON1
    J2_Right,           //  35  PA5     X4-4    JOY2RIGHT
    J2_Left,            //  34  PA6     X4-3    JOY2LEFT
    J2_Up,              //  33  PA7     X4-2    JOY2UP
    0,                  //   1  PB0     X9-2    SHIFTSWITCH
    0,                  //   2  PB1     X7-1    MOUSEXCLOCK1
    0,                  //   3  PB2     X7-2    MOUSEXCLOCK2
    0,                  //   4  PB3     X8-1    MOUSEYCLOCK1
    0,                  //   5  PB4     X8-2    MOUSEYCLOCK2
    J1_Button4,         //   6  PB5     X5-1    
    J1_Button5,         //   7  PB6     X5-2    
    J1_Button6,         //   8  PB7     X5-3    
    J1_Up,              //  22  PC0     X3-2    JOY1UP
    J1_Left,            //  23  PC1     X3-3    JOY1LEFT
    J1_Right,           //  24  PC2     X3-4    JOY1RIGHT
    J1_Button1,         //  25  PC3     X3-5    JOY1BUTTON1
    J1_Button2,         //  26  PC4     X3-6    JOY1BUTTON2
    J1_Button3,         //  27  PC5     X3-7    JOY1BUTTON3
    KEY_1,              //  28  PC6     X3-8    JOY1START
    J2_Down,            //  29  PC7     X4-1    JOY2DOWN
    J2_Button4,         //  15  PD1     X5-4    JOY3RIGHT
    J2_Button5,         //  17  PD3     X5-5    JOY3BUTTON1
    J2_Button6,         //  18  PD4     X5-6    JOY3BUTTON2
    0,                  //  19  PD5     X5-7    
    KEY_3,              //  20  PD6     X5-8    JOY3START
    J1_Down             //  21  PD7     X3-1    JOY1DOWN
};

Kompilieren, Programmieren, Fertig!
Die Buttons müssen natürlich entsprechend der neuen Pinzuordnung verdrahtet werden.

LG
 
@lupo
Vielen Dank für die schnelle Antwort.

Wenn ich die Maus nicht verwenden will, kann ich dann die Anschlüsse X7-1,X7-2,X8-1 und X8-2 auch als Buttons definieren?

Und muss ich dann in der avr.h

# define USE_MOUSE_DEVICE 0

eintragen?
 
Firmware Version 1.2

Neue Firmwareversion:
* Vorkonfiguriert für
- 2 Joysticks 8 Button
- 3 Joysticks 3 Button und Maus
* Updated to vusb-20100715

Download unter: http://vusb.wikidot.com/project:mamepanel
(Ich kann die neue Firmware aufgrund der Größenbeschränkung im Forum leider nicht direkt hochladen)
 
Ich bin derzeit dabei mir ein Virtual Pinball Cab zu bauen. Dafür bin ich auf der Suche nach einem Controller für die einzelnen Buttons sowie einem Nudge/Tilt-Sensor.

Als Nudge/Tilt-Sensor möchte ich ein Modul einsetzen das Beschleunigungen misst und diese analog ausgibt.

Daher meine Frage, ist es möglich die Firmware so zu verändern das die X und Y Achsen analog angesteuert werden können? Ich kann C und C++ programmieren, hatte bis jetzt allerdings noch nicht viel Kontakt mit Atmels.
An welchen Stellen in er Firmware müsste ich hier ansetzen?
 
Hallo Maniac!

Ich bin derzeit dabei mir ein Virtual Pinball Cab zu bauen. Dafür bin ich auf der Suche nach einem Controller für die einzelnen Buttons sowie einem Nudge/Tilt-Sensor.

Als Nudge/Tilt-Sensor möchte ich ein Modul einsetzen das Beschleunigungen misst und diese analog ausgibt.

Daher meine Frage, ist es möglich die Firmware so zu verändern das die X und Y Achsen analog angesteuert werden können? Ich kann C und C++ programmieren, hatte bis jetzt allerdings noch nicht viel Kontakt mit Atmels.
An welchen Stellen in er Firmware müsste ich hier ansetzen?

Es ist sicherlich möglich, benötigt aber einiges an Zeit und Geduld.

Du kannst den ADC des Atmels verwenden um die analogen Werte zu digitaliseren.
Beim ATMega32 können alle Pins von Port A also Pin 33 bis Pin 40 auch als ADC Input Pins betrieben werden.

Im Moment sind für die Achsen nur zwei Bit und ein Wertebereich von 0-2 reserviert: 0 Links, 1 Mitte, 2 Rechts
Um die digitalisierten Werte als X und Y Achse per USB übermitteln zu können, musst du den USB Deskriptor ändern.
Du musst zumindest die Reportsize für die Achsen von 2 Bit auf z.B. 8 Bit erhöhen und die Werte für das logische Minimum/Maximum
entsprechend anpassen. In der Funktion ReportJoystick muss dann das Datenpaket entsprechend dem Reportdescriptor richtig zusammengebaut
werden.

Alles in allem sicher kein leichter Umbau aber machbar.

Viel Erfolg damit und lG,
Lupo
 
Hallo Lupo,

kurze Frage zu folgenden Abweichungen:

1) in der 8pin version ist ein 5k6Ohm Res definiert, in der 32pin version ein 4k7Ohm.
Kann ich in beiden Schaltungen vice-versa gehen?

2) in der 8pin version ist kein 100nf Cap zwischen GND und AREF definiert, in der 32pin version aber schon.
Ist das so richtig?

Danke und lg
Alex
 
Hallo Alex,

1) in der 8pin version ist ein 5k6Ohm Res definiert, in der 32pin version ein 4k7Ohm.
Kann ich in beiden Schaltungen vice-versa gehen?

Ob 4k7 oder 5k6 spielt in diesem Fall keine Rolle. Du kannst in beiden Schaltungen wahlweise 4k7 oder 5k6 nehmen.

2) in der 8pin version ist kein 100nf Cap zwischen GND und AREF definiert, in der 32pin version aber schon.
Ist das so richtig?

Der 100nF Kondensator dient als Pufferkondensator für die interne Referenzspannung des A/D Wandlers. Die Firmware für den Mame Arcade Panel Controller verwendet den A/D Wandler nicht. Daher wird eigentlich auch der 100nF Kondensator an AREF nicht benötigt und du kannst diesen einfach weglassen. Ich habe den Kondensator in der 32pin Version nur deshalb bestückt, damit das Board auch zweckendfremded für andere Spielereien (mit anderer Firmware) verwendet werden kann. Du kannst in beiden Schaltungen wahlweise einen 100nF Kondensator zwischen AREF und Masse schalten oder diesen auch weglassen.

LG,
Lupo
 
herzlichen dank - flexibel ist immer gut,
oder wie man bei uns hier sagt: "Hilfts nicht, so schadets nicht" - passt hier dann auch.

Danke, kann ich nun am Wochenende umsetzen.

Danke auch für die o.a. Erläuterungen zum Umschreiben der Inputs.

LG
Alex
 
hi,

wenn ich hid_keycodes.h richtig interpretiere, sind ja pro joystick# nur 8 buttons definierbar.

angenommen ich will mit einem ATMEGA32 ein 1P-Device realiaieren, mit Joystick (4 I/O) und die restlichen 28 I/O sollen Buttons sein.

Kein Shiftswitch, etc - erweitere ich dazu nur die hid_keycodes.h, oder zieht sich das über weitere bereiche?

zweite Frage:
Wenn ich einen zweiten Shiftswitch will, ist das sehr aufwändig zu implementieren?

Danke!
lg
Alex
 
wenn ich hid_keycodes.h richtig interpretiere, sind ja pro joystick# nur 8 buttons definierbar.

angenommen ich will mit einem ATMEGA32 ein 1P-Device realiaieren, mit Joystick (4 I/O) und die restlichen 28 I/O sollen Buttons sein.

Kein Shiftswitch, etc - erweitere ich dazu nur die hid_keycodes.h, oder zieht sich das über weitere bereiche?

zweite Frage:
Wenn ich einen zweiten Shiftswitch will, ist das sehr aufwändig zu implementieren?

Hallo Alex,

dafür musst du einige Änderungen vornehmen:
In hid_keycodes.h werden ja nur die Enums definiert - die musst du auf 1 Joystick mit 28 Buttons definieren
In main.c musst du einen neuen USB Descriptor definieren - derzeit sind nur 8 bit für max. 8 Buttons definiert.
In hid_input_mapping.c musst du eine neue Zuordnung zwischen Pins und Funktion definieren.
In hid_input.c musst du den Joystickreport und die Abfragen ändern.

Zweiter Shiftswitch ist nicht sehr aufwendig, aber du solltest dir zuerst den Code genau anschauen.

Für beide Fragen gilt:
Wenn du dir die Codeteile im Rootverzeichnis durchliest und auch genau verstehst was wie gemacht wird, sollten die Änderungen möglich sein - andernfalls lass es lieber bleiben.

Liebe Grüße und viel Glück,
Lupo
 
vielen dank für die hilfe, ich meine das ist nicht soo komplex.

einen ps3 homebutton möchte ich noch dranbauen, dann wird das teil ein klein wenig universeller :D

Wird wohl was für den Weihnachtsurlaub.

Danke und lg
Alex
 
vielen dank für die hilfe, ich meine das ist nicht soo komplex.

einen ps3 homebutton möchte ich noch dranbauen, dann wird das teil ein klein wenig universeller :D

Wird wohl was für den Weihnachtsurlaub.

Danke und lg
Alex

Na dann viel Glück und lass uns wissen obs was geworden ist.
 
na ich bin so frei... ich habs nicht geschafft, dafür reichen meine kenntnisse dann nicht aus, milde gesagt :)

ich löse meinen use case in dem fall so, dass ich das meiste über keyboard-input löse.
via shift switch definiere ich dann 1 joystick + 8 buttons auf P1, und weitere 8 buttons auf P3; für den case dass ein emu dann doch nicht mit keyboardinput oder vjoy zurechtkommt... ist aber eher theoretisch denke ich...

"schöner" wäre dann aber doch eine völlig freie belegung, ich selbst kanns aber nicht lösen...

vielen dank für die hilfe bis jetzt, wenn mein projekt "für mich" dann funktioniert, geb ich auch mal eine dokumentation bzw. fotostory der gesamtlösung frei :)

lg
Alex
 
hi,

ich hab nun ein problem:

einige tastatur-keys werden immer zusammen ausgelöst.

soll heissen:
pin 37 an GND schreibt "ga", und pin 36 an GND schreibt auch "ga".
selbes mit pin 34/35 - schreiben beide "qs"

viel spannender:
je 26/27/28 an GND schreibt "kkk"

die pins sind nicht kurzgeschlossen.

ich hab aber statt dem 1M Ohm Res einen 56k Ohm Res gegen GND auf USB_P, einfach weil ich keinen 1M da hab ~
kanns das dann auch sein?

mapping:
Code:
[COLOR=#000000][FONT=Courier New]// Atmega32 Shift switch off[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]PROGMEM const unsigned char NormalMapping[NUMBER_OF_INPUTS] =[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]{                       //  Pin Atmega  Board   Function[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_R,              //  40  PA0     X6-1    COINTRIGGER[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_F,              //  39  PA1     X4-8    JOY2START[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_D,         //  38  PA2     X4-7    JOY2BUTTON3[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_G,         //  37  PA3     X4-6    JOY2BUTTON2[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_A,         //  36  PA4     X4-5    JOY2BUTTON1[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_S,           //  35  PA5     X4-4    JOY2RIGHT[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_Q,            //  34  PA6     X4-3    JOY2LEFT[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_W,              //  33  PA7     X4-2    JOY2UP[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,                  //   1  PB0     X9-2    SHIFTSWITCH[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,                  //   2  PB1     X7-1    MOUSEXCLOCK1[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,                  //   3  PB2     X7-2    MOUSEXCLOCK2[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,                  //   4  PB3     X8-1    MOUSEYCLOCK1[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,                  //   5  PB4     X8-2    MOUSEYCLOCK2[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,            //   6  PB5     X5-1    JOY3DOWN[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,              //   7  PB6     X5-2    JOY3UP[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,            //   8  PB7     X5-3    JOY3LEFT[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   MB_Middle,              //  22  PC0     X3-2    JOY1UP[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   MB_Left,            //  23  PC1     X3-3    JOY1LEFT[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_6,           //  24  PC2     X3-4    JOY1RIGHT[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_1,         //  25  PC3     X3-5    JOY1BUTTON1[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_L,         //  26  PC4     X3-6    JOY1BUTTON2[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_J,         //  27  PC5     X3-7    JOY1BUTTON3[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_K,              //  28  PC6     X3-8    JOY1START[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   KEY_I,            //  29  PC7     X4-1    JOY2DOWN[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,           //  15  PD1     X5-4    JOY3RIGHT[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,         //  17  PD3     X5-5    JOY3BUTTON1[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,         //  18  PD4     X5-6    JOY3BUTTON2[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,         //  19  PD5     X5-7    JOY3BUTTON3[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   0,              //  20  PD6     X5-8    JOY3START[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]   MB_Right             //  21  PD7     X3-1    JOY1DOWN[/FONT][/COLOR]
[COLOR=#000000][FONT=Courier New]};[/FONT][/COLOR]

was da los? :)
kann das was damit zu tun haben, dass ich manche "unbenutzte" i/o des atmega32 auf "0" belegt habe? darf das sein?

lg Alex

EDIT:
ich flashe nun mal eine Deiner original-firmwares die du auslieferst, mal sehen obs was mit meine compile-chain zu tun hat (winavr; aktuellste version)...
edit2:
deine ausgelieferte FW macht mir dieselben symptome... ich schliesse ein software-problem daher mal aus... kacke, kann ich nun nochmal HW-aufbau debuggen :D
 
Zuletzt bearbeitet:
Zurück
Oben