Hallo an alle!
Ich arbeite grad an einem Projekt, bei dem Taster als Keybordeingabe an den PC via USB weitergegeben werden.
Wichtig ist, viele Tasten gleichzeitig!
Deshalb habe ich mich für den HoodLoader2 incl. HID-Projekt entschlossen.
Nun habe ich meinen "Arduino Mega 2560 + Atmega8U2" erfolgreich mit dem HoodLoader2 geflasht, die Boad-Definitionen geladen und die HID-Project-Bibliothek hinzugefügt.
System:
Arduino IDE 1.8.10
Windows 10
Arduino Mega 2560 + Atmega8U2
HID-Project 2.6.1
HoodLoader2 2.0.5
Das Problem:
Beim Überprüfen oder Hochladen des Beispielsketchs "NKROKeyboard" erhalte ich folgende Fehlermeldung:
Arduino: 1.8.10 (Windows 10), Board: "HoodLoader2 Mega 2560"
................................
Error while detecting libraries included by C:\Users\TUTTOF~1\AppData\Local\Temp\arduino_build_205453\sketch\Hood-Keyboard-Test.ino.cpp
................................
In file included from D:\_Daten\Dokumente\Arduino\Hood-Keyboard-Test\Hood-Keyboard-Test\Hood-Keyboard-Test.ino:17:0:
D:\_Daten\Dokumente\Arduino\libraries\HID-Project\src/HID-Project.h:35:2: error: #error HID Project can only be used with an USB MCU.
#error HID Project can only be used with an USB MCU.
^~~~~
Mehrere Bibliotheken wurden für "HID-Project.h" gefunden
Benutzt: D:\_Daten\Dokumente\Arduino\libraries\HID-Project
Mehrere Bibliotheken wurden für "HID.h" gefunden
Benutzt: E:\Arduino\arduino-1.8.10-windows\arduino-1.8.10\hardware\arduino\avr\libraries\HID
Bibliothek HID-Project in Version 2.6.1 im Ordner: D:\_Daten\Dokumente\Arduino\libraries\HID-Project wird verwendet
Bibliothek HID in Version 1.0 im Ordner: E:\Arduino\arduino-1.8.10-windows\arduino-1.8.10\hardware\arduino\avr\libraries\HID wird verwendet
exit status 1
Fehler beim Kompilieren für das Board HoodLoader2 Mega 2560.
Das eigentliche Problem scheint das "#error HID Project can only be used with an USB MCU." zu sein.
Der Sketch:
/*
Copyright (c) 2014-2015 NicoHood
See the readme for credit to other people.
NKROKeyboard example
Press a button to hold a lot of keys at the same time.
NKRO can push 113 keys at the same time,
the other Keyboards only 6 keys + 8 modifiers!
You may also use SingleNKROKeyboard to enable a single report NKROKeyboard.
See HID Project documentation for more information.
https://github.com/NicoHood/HID/wiki/Keyboard-API#nkro-keyboard
*/
#include "HID-Project.h"
const int pinLed = LED_BUILTIN;
const int pinButton = 2;
void setup() {
pinMode(pinLed, OUTPUT);
pinMode(pinButton, INPUT_PULLUP);
// Sends a clean report to the host. This is important on any Arduino type.
NKROKeyboard.begin();
}
void loop() {
// Hold a lot of keys at the same time
if (!digitalRead(pinButton)) {
digitalWrite(pinLed, HIGH);
// Do not press to many at once or some OS will have problems.
// Note that the resulting pressed order might differ,
// because all keys are pressed at the same time.
NKROKeyboard.add('0');
NKROKeyboard.add('1');
NKROKeyboard.add('2');
NKROKeyboard.add('3');
NKROKeyboard.add('4');
NKROKeyboard.add('5');
NKROKeyboard.add('6');
NKROKeyboard.add('7');
NKROKeyboard.add('8');
NKROKeyboard.add('9');
NKROKeyboard.send();
// Release all keys and hit enter
NKROKeyboard.releaseAll();
NKROKeyboard.println();
// Simple debounce
delay(300);
}
}
Der Arduino sollte außerdem im Gerätemanager als HID-Gerät aufscheinen.... tut er aber nicht.
Im Wiki hab ich irgendwo gelesen, daß nach Aufspielen eines Programms, der Arduino eben das macht.
Tut er aber nicht da ich dieses Programm wegen obiger Fehlermeldungen nicht aufspielen kann.
Oder muß ich einen spezifischen Sketch auf den Atmega8U2 bringen?
Aber welchen?
Die Sketchs, welche da drauf können, dürfen anscheinend 4096 bytes nicht überschreiten.
Wahrscheinlich ist es ein total simpler Fehler den ich übersehe.......
Den Verdacht hatte ich auch schon....
Hab aber gehofft, daß der Sketch trotzdem auch für den 8U2 verwendbar ist, oder es vielleicht doch einen Trick giebt.
PS.: Hab auch den Autor kontaktiert, aber leider noch keine Rückmeldung erhalten..... Snief
Tja, ein neuer Mega wär jetzt natürlich die einfachste Lösung.
ca. € 40,-
Aber da es langsam etwas persönliches wird und mein Bastlerherz beim Gedanken blutet, den Mega wegen sowas auf´s Abstellgleis zu befördern, trage ich mich mit dem Gedanken, den 8U2 zu umgehen und einen 16U2 auf den Arduino2560 zu bringen.
Wenn ich das Datenblatt richtig gelesen habe, sind die zwei Atmel nur über jeweils einen RX und TX vebunden.
Der Rest ist autonom, bzw. nur mit + und - verbunden.
Das muß doch gehen! >:(
Ev. durch eine externe Platine....
ABER vorerst will ich doch noch den soften Weg gehen, und mal schauen, ob ich nicht vielleicht die Library etwas abspecken kann oder besser, vielleicht giebts das ja schon irgendwo?
spaceball:
Tja, ein neuer Mega wär jetzt natürlich die einfachste Lösung.
Nun ja, ich würde eventuell zu einem Teensy 3.2 greifen, da kann man an USB eine Tastatur anschließen. Zumindest gibt es in der IDE eine Auswahlmöglichkeit, probiert habe ich es mangels Interesse aber noch nicht. Viele Tasten dann über MCP23017.
Aber auch bei den Arduinos gibt es welche mit Tastaturanschlußmöglichkeit.
Natürlich nur für den Fall, Du bist des Bastelns müde
agmue:
Nun ja, ich würde eventuell zu einem Teensy 3.2 greifen, da kann man an USB eine Tastatur anschließen.
Das geht ja nicht, hatten wir ja hier vorgestern in einem separaten Thread. Das normale USB-Tastenprotokoll kann nur sechs Tasten (plus vier Modifier) gleichzeitig.
Er will eine Gaming Tastatur, wo alle Tastendrücke als Bitmap gesendet werden.
Ein Micro, Zero oder MKR würden gehen, darauf läuft die Library, die er auf den 8U2 bringen will, ja auch.
So! Jetzt hab ich noch einen Plan C ausgeknobelt.
Eigentlich müßte es ja auch möglich sein, sowohl den Sketch des Atmega8U2, als auch des Atmega 2560 direkt mit einem ISP-Programmer auf den jeweiligen Chip zu flashen.....
Da dann kein Bootloader und ähnliches verwendet werden muß, müßte ja dann der Speicher reichen???
Da bin ich mir eben nicht sicher....
So wie ich das verstanden habe, ist es so:
Der Trick des HoodLoader2 ist ja, daß er den DFU-Bootloader des USB-Chips (in meinem Fall der Atmega8U2) ersetzt und in der folge als 2tes Com- bzw. HID-Gerät aufscheint, das man dann auch (nach kurzem Verbinden des Resetpins) direkt ansprechen und mit der Arduino-IDE programmieren kann.
Der "große" Atmel ist weiterhin normal ansprechbar.
Da der DFU-Bootloader ja nun nicht mehr funktioniert , meine ich (leider ohne Fakten ), daß dieser vielleicht doch softwareseitig gelöst wurde und deshalb gelöscht wurde .....
Meine Idee wäre nun, eben nicht nur den DFU-Bootlader, sondern auch den HoodLoader2-Bootloader wegzulassen.
Damit müßte ich den fehlenden Platz, den ich für den Sketch benötige, noch raushauen.
In der board.txt vom Hoodloader ist der verfügbare Speicherplatz auf dem Atmega8U2 nur mit 4096 Bytes angegeben.
Der HID-USB_Bridge-Sketch benötigt aber 5886 Bytes.
Jetzt suche ich eine funktionierende board.txt für einen "nackten" Atmega8U2, der dann auch 8KByte zur Verfügung stellt.
Hab bis jetzt leider nichts eindeutiges gefunden.
Die Frage ist, wenn der Atmega8U2 wirklich 8KByte Speicher hat und ich mit einem ISP den HID-Bridge-Sketch direkt aus der Arduino-IDE rauflade (ohne Bootloader), dann müßte doch nach dem Starten, der Atmega8U2 den Sketch direkt ausführen....
.... und alles ist gut
Oder bin ich da auf dem totalen Holzweg???
Man muss schon unterscheiden zwischen HW Bootloader und Software Bootloader.
Der HWB ist fest integriert.
Den Software Bootloader kannst du entfernen, falls vorhanden.
Erstes Problem: Externer Kristall 16MHz
Aus dem Bauch raus würd ich folgendes nehmen:
Ext. Crystal Osc.; Frequency 8.0- MHz; Start-up time: 258 CK + 65 ms; [CKSEL=1110 SUT=01]
Ist eh die Standarteinstellung
Oder doch folgendes? Ist meines Wissens beim 2560er so eingestellt !?
Ext. Crystal Osc.; Frequency 8.0- MHz; Start-up time: 1K CK + 65 ms; [CKSEL=1110 SUT=00]
Boot Flash Size ist mit 2KByte angegeben.
Der Rest reicht für die benötigte Sketchgröße von 5886 Bytes.
Oder kann ich die Boot Flash Size auch aufs Minimum (256 words) setzen, wenn ich gar keinen Softwarebootloader raufgeben will, sondern direkt den Sketch starten will?
Scheint nach meiner bescheidenen Meinung so zu passen:
Low 0x5E
High 0xD9
Extendet 0xF4
Gibt es bestimmte Fuses, die man auf keinen Fall anrühren darf?
Panik: Der Chip ist unwiederruflich gesperrt..... :o
Oder kann ich die Boot Flash Size auch aufs Minimum (256 words) setzen, wenn ich gar keinen Softwarebootloader raufgeben will,
Wenn du den ResetVector abschaltest, ist die Einstellung wirkungslos.
Also Default beibehalten.
Scheint nach meiner bescheidenen Meinung so zu passen:
Low 0x5E
High 0xD9
Extendet 0xF4
CKDIV8 ??
Du möchtest den 8U2 mit 2 MHz betreiben?
Gibt es bestimmte Fuses, die man auf keinen Fall anrühren darf?
Panik: Der Chip ist unwiederruflich gesperrt..... :o
Aber sicher doch!
SPIEN sollte aktiv bleiben, sonst kein Programmieren über ISP
RSTDISBL sollte deaktiviert bleiben, sonst kein HardwareReset. Also auch kein ISP/Flip
Eine gültige Takt quelle ist natürlich auch überlebenswichtig.
CKDIV8 ??
Du möchtest den 8U2 mit 2 MHz betreiben?
Wohl eher nicht!
Ich seh schon, ich muß mich da noch etwas weiter bilden!
Falls aber jemand ein Beispiel für eine Atmega8U2-board.txt hätte, wär ich dankbar.
Auf diesem Gebiet bin ich einfach totaler Frischling und möchte nichts zerschiessen (Fuses & Co).
PS.: @combie und allen anderen
Vielen Dank für die geduldige Hilfe und Unterstüzung
Es steht sowohl beim originalen als auch beim modifizierten Fuse-Set ein BOOTSZ von 2KByte.
Geh ich richtig, daß darin der Bootloader usw. drin sind?
Dann müßte ja auch der HoodLoader2 in diesen 2 KB drin sein?
Wenn dem so ist, müßte ich noch 6 KB übrig haben.
In der board.txt steht nun
MCU properties
HoodLoader2atmega8u2.upload.maximum_size=4096
Was passiert, wenn ich maximum_size=6144 eingeb? (Abgesehen davon, daß ich mir schlimmstenfalls das bestehende Programm zerschieß. Kann ja aber wieder raufgeschrieben werden......).
Ist das Startbyte für das raufgeladene Programm dann immer am Anfang des 3. KByte?