Hallo! Ich hoffe das mir noch jemand helfen kann! Vorgeschichte: ich habe das Irmp von Frank M. http://www.mikrocontroller.net/articles/IRMP mit V-USB http://www.obdev.at/products/vusb/index.html kombiniert. Sinn der Sache ist, dass empfangen Codes per USB an den Host übertragen werden. Die Übertragung geht per Polling vom Host über HID Device: http://msdn.microsoft.com/en-us/library/ms790913.aspx Auf dem PC, wo ich es programiert und getestet hatte ging das Polling und empfangen von Codes einwandfrei. Dann bin ich mit dem Empfänger zu einem anderen PC gegangen und siehe da, dass Init geht nicht. Dies hab ich behoben, das ich zuerst Timer0 starte und nach ~4s der Timer1 gestartet wird, der die IR-Codes empfängt. Dann geht das Init, jedoch gibt es weiterhin probleme mit dem Polling. INT0: Wird für USB verwendet INT1: Polling Timer für IR-Erkennung Anbei habe ich einmal mit dem Oszi gemessen am D-: (Die höheren Spannungen ist die Antwort vom AVR) OK_Port: so schaut es an dem PC aus wo es keine Probleme gibt. Reply_of_AVR: So schaut die Antwort des AVRs aus, jedoch nicht 4V wie im Bild sondern 3,6V (Z-Diode) NOK_Port_1.gif: Wenn das Polling klappt sieht es so auf dem Port aus an dem es die Fehler gibt. NOK_Port_No_Reply_of_AVR: hier sieht man, dass der AVR gar nicht antwortet NOK_Port_No_Reply_of_AVR_2: hier nocheinmal NOK_Port_No_Reply_of_AVR_3: und hier nocheinmal Wie gesagt beim "guten" Port sieht es immer so aus wie bei OK_Port.gif. Bei Ports die Probleme machen so wie die anderen Gifs. Getestet auf: P35-DS4 Gigabyte, Win7 32: Alle Ports OK MA785GM Gigabyte, Win7 32: Es gibt bei jedem Port gibt es Probleme, egal ob intern oder externe Ports. X40-Laptop+Dockingstation, WinXP SP3: Ports am Laptop gehen, Ports auf der Dockingstation gehen nicht. Gerade wegen dem x40-Laptop tippe ich auf vielleicht ein Spannungsproblem von D+ oder D-. Es scheint ja USB-Chips geben die sehr empfindlich sind. Mein Atmega8-16 läuft leider nur mit min. 4.5V. Eine Alternative wäre der Atmega8-8. Der läuft auch mit 3.3V, jedoch weis ich nicht ob ich den auch mit 12Mhz betreiben kann. Das Datenblatt sagt 8MHz. Auch habe ich den Atmega Source hier einmal drangehängt. Die Software vom Host kann ich auch noch zur Verfügung stellen. Der Source ist nicht ganz sauber, da ich schon viel herum probiert habe... Ich hoffe, dass mir jemand noch den Entscheidenen Tipp geben kann, damit das endlich auf alle USB-Ports funktioniert. Danke!
:
Verschoben durch User
Tu dir doch einen Gefallen und nehme einen Prozessor mit on-board USB Unterstützung. HID über dieses V-USB hat bei mir überhaupt nicht funktioniert. Auf Mailanfrage hieß es dann, dass das wohl nicht zuverlässig funktioniert, da HID mindestens Full Speed Usb braucht (12MBit/s), aber der AVR nur dieses ganz langsame USB unterstützt.
Danke für die Info! Hast auch einen Tipp welcher AVR hier in Frage kommen würde? Brauche einen Timer für 100µs Polling und einen Ausgangsport um einen Optokopler schalten zu können. 6 Bytes vom AVR lesen, 6 Bytes zum AVR schreiben. Zusätzlich: Ich habe gesehen, dass ich den Thread im falschen Bereich des Forums geposted habe. Bitte in den richtigen verschieben. Danke!
... ... schrieb: > Tu dir doch einen Gefallen und nehme einen Prozessor mit on-board USB > Unterstützung. HID über dieses V-USB hat bei mir überhaupt nicht > funktioniert. Auf Mailanfrage hieß es dann, dass das wohl nicht > zuverlässig funktioniert, da HID mindestens Full Speed Usb braucht > (12MBit/s), aber der AVR nur dieses ganz langsame USB unterstützt. Bei mir hat das alles wunderbar funktioniert und ist seit über inem Jahr im Einsatz. Beitrag "Re: RC5, RC6 AVR/PIC Receiver mit USB"
Ja, aber ich will die empfangen IR-Codes plain zum Host schicken und nicht im AVR entscheiden, welche Funktion bei welchen Code ausgeführt werden soll. Ach, der AVR sollte auch DIL sein - wird ja ein Lochraster Aufbau...
Hugo Portisch schrieb: > Ja, aber ich will die empfangen IR-Codes plain zum Host schicken und > nicht im AVR entscheiden, welche Funktion bei welchen Code ausgeführt > werden soll. Wo ist da jetzt das Problem. Das sind ein paar Zeilen Code geändert.
>Ach, der AVR sollte auch DIL sein - wird ja ein Lochraster Aufbau... Soweit ich weiss gibt es keine AVRs mit USB in DIL/DIP. Aber schau dir mal die AT90USB... an, vorallem das AT90USBKEY-Board. ca 2x5cm, AT90USB1287 drauf (entspricht in etwa einem mega128). Alle I/Os sind auf Pinleisten rausgeführt.
@IR Ich will aber keine Tastendrücke schicken, sondern den nativen IR-Code. So wie du es gemacht hattest, wurden ja Tastendrücke geschickt. Mit einer Host Software kann ich die native IR-Codes dann auswerten und je nach Anwendung in Tastendrücke oder sonstige Steuerung umwandeln. Hatte es am Anfang auch mit usbSetInterrupt versucht. Bin aber zu keinem Erfolg gekommen. Da ich nun einige Zeit mit dem V-USB gearbeitet habe werde ich es aber nocheinmal über usbSetInterrupt versuchen. Das würde mir sowieso um Welten besser gefallen als über Polling. Es könnte dann auch das Problem lösen.
nativer ir code über usb??? und das mit dem irmp??? sry, aber das konzept taugt hinten und vorne nix
@ Hugo Was willst du denn im Endeffekt erreichen? Ein Programm über FB steuern? Wenn ja: welches?
also USB HIDs laufen Millionenfach als Low Speed Devices wie es auch V-USB macht. Das ist in dem Fall nur ein Problem mit der Pegelanpassung 5V <-> 3.3V. Und ein HID ist wenn man wenig Daten übertragen möchte die beste USB Lösung, da man auf allen Betriebssystem keine weiteren Treiber benötigt.
Ah - hab's grad im anderen Thread gelesen: DVBViewer steuern. Lässt der sich nicht über einzelne Tasten der Tastatur steuern? Falls ja könntest du doch eine Tastatur "emulieren". Vielleicht würde das deine Probleme lösen, wäre einfacher und schneller in der Ausführung von/ Reaktion auf Tastendrücke und du bräuchtest kein zusätzliches Plugin.
Kommst du dir nicht vielleicht mit einem Interrupt in die Quere? Du musst garantieren, dass der USB-Interrupt (abhängig von deiner Taktfrequenz) innerhalb eines spezifizierten Zeitrahmens von ca. 10 Takten (Details siehe Doku/Headerfile) ausgeführt werden kann. Dass schließt die Verwendung eigener Interrupts fast vollständig aus, einzige Ausnahme: Unterbrechbare Interrupts, die aber etwas komplizierter sind ... mfG Markus
Micha schrieb: > Ah - hab's grad im anderen Thread gelesen: DVBViewer steuern. > > Lässt der sich nicht über einzelne Tasten der Tastatur steuern? Falls ja > könntest du doch eine Tastatur "emulieren". Vielleicht würde das deine > Probleme lösen, wäre einfacher und schneller in der Ausführung von/ > Reaktion auf Tastendrücke und du bräuchtest kein zusätzliches Plugin. Darin liegt wieder das nächste Problem. Dafür muss DVBViewer im Vordergrund (aktiv) sein. Wenn ein anderes Fenster im Vordergrund ist bekommt das die Befehle. markusj schrieb: > Kommst du dir nicht vielleicht mit einem Interrupt in die Quere? > Du musst garantieren, dass der USB-Interrupt (abhängig von deiner > Taktfrequenz) innerhalb eines spezifizierten Zeitrahmens von ca. 10 > Takten (Details siehe Doku/Headerfile) ausgeführt werden kann. > Dass schließt die Verwendung eigener Interrupts fast vollständig aus, > einzige Ausnahme: Unterbrechbare Interrupts, die aber etwas > komplizierter sind ... > > mfG > Markus Das erklärt mir leider aber nicht warum es bei einm USB-Port ohne Probleme geht - bei einem anderen Port am gleichem PC aber nicht... Wenn das nicht wäre, wäre schon alles fertig... :( Sebastian___ schrieb: > also USB HIDs laufen Millionenfach als Low Speed Devices wie es auch > V-USB macht. > Das ist in dem Fall nur ein Problem mit der Pegelanpassung 5V <-> 3.3V. > Und ein HID ist wenn man wenig Daten übertragen möchte die beste USB > Lösung, da man auf allen Betriebssystem keine weiteren Treiber benötigt. Also vielleicht doch einfach einmal mit dem ATmega8-8 Probieren? Diesen dann mit 12MHz & 3.3V betreiben? Zu HID: genau das ist mein Ziel. Kleine Daten und vor allem kein extra Treiber!
markusj schrieb:
> Kommst du dir nicht vielleicht mit einem Interrupt in die Quere?
genau das isses. hab ich auch schon (in nem andren thread) angesprochen.
stieß auf taube ohren...
Hugo Portisch schrieb: > Darin liegt wieder das nächste Problem. Dafür muss DVBViewer im > Vordergrund (aktiv) sein. Wenn ein anderes Fenster im Vordergrund ist > bekommt das die Befehle. dann ist dein empfangendes programm schlecht geschrieben. man kann auch tastaturbefehle an einen task schicken, der nicht im fokus ist. vielleicht passt dir ja miriam von sixdots besser - das kann das auch. > Das erklärt mir leider aber nicht warum es bei einm USB-Port ohne > Probleme geht - bei einem anderen Port am gleichem PC aber nicht... höchstwahrscheinlich ist eine hardware toleranter, was das timing angeht und verzeiht dir die verzögerung. > Wenn das nicht wäre, wäre schon alles fertig... :( aber murksig fertig. sorry =) > Also vielleicht doch einfach einmal mit dem ATmega8-8 Probieren? Diesen > dann mit 12MHz & 3.3V betreiben? läuft denn dein controller momentan nur mit 5V und kommen diese pegel an die usb-seite? das wäre ungünstig! und was genau soll der atmega8-8 sein? meinst du die "usb vriante"? ATmega8U2?
Michael M. schrieb: >> Darin liegt wieder das nächste Problem. Dafür muss DVBViewer im >> Vordergrund (aktiv) sein. Wenn ein anderes Fenster im Vordergrund ist >> bekommt das die Befehle. > dann ist dein empfangendes programm schlecht geschrieben. Das würd ich auch sagen. Macht ja aber auch wenig Sinn ein Programm zu steuern, das im Hintergrund läuft und dessen Fenster man am besten gar nicht sieht. Kannst du nicht einstellen, dass DVBViewer immer im Vordergrund bleibt? Bei MediaPortal geht das.
Micha schrieb: > Michael M. schrieb: >>> Darin liegt wieder das nächste Problem. Dafür muss DVBViewer im >>> Vordergrund (aktiv) sein. Wenn ein anderes Fenster im Vordergrund ist >>> bekommt das die Befehle. >> dann ist dein empfangendes programm schlecht geschrieben. > Das würd ich auch sagen. Macht ja aber auch wenig Sinn ein Programm zu > steuern, das im Hintergrund läuft und dessen Fenster man am besten gar > nicht sieht. ist bei mir und meiner tv karte oft der fall. z.b., wenn per IM eine nachricht reinkommt, oder grad das video-text fenster offen ist und ich trotzdem programm wechseln will, weil ich zu faul bin, den epg zu starten =)
Naja bei mir ist der HTPC halt nur zu diesem Zweck da. Ohne Onlinezugang und nur mit den wirklich nötigen Programmen für diese Aufgabe.
@Michael M. Im Datenblatt vom Atmega8 steht: 2.7 - 5.5V: ATmega8L-8* 4.5 - 5.5V: ATmega8-16* Ich habe halt den ATmega8-16* Habe es jetzt noch mit Interrupt (usbSetInterrupt) probiert. Es kommen auch die Daten per Interrupt am Host an, jedoch geht das noch schlechter als über Polling. Das mit dem Interrupt/Timing Problem im AVR durch den Polling Timer habe ich schon verstanden! Das erklärt mir trotzdem nicht warum es an manchen Ports ohne Probleme geht, an anderen aber nicht! Werde mir das AT90USBKEY Eval Board mal ansehen.
Das Problem mit dem Focus bei der DVB Viewer Steuerung kann man umgehen, indem man Girder oder EventGhost benutzt. Die schicken die Befehle über das COM-Interface zum Viewer. Da landen sie dann garantiert dort und nur dort. Egal, ob der im Hintergrund, im Vordergrund, minimiert oder sonstwas ist. Ich hab das auch so mit dem DVB Viewer, aber um dem Gefrickel mit V-USB usw. aus dem Weg zu gehen per FT232R, und ein MSP430 dekodiert die RC5 Befehle incl. ordentlicher Toggle-Bit Behandlung und sendet die dann in einem 6-Byte Paket zum EventGhost. Der Treiber für den FT232R wird über Windows Update in Vista und 7 mitgeliefert.
sag mal... gehst du jetzt mit 5V pegel in die usb-schnittstelle oder nicht? das wurdest du jetzt btw zum dritten mal gefragt.
Nei, ich gehe nicht mit dem 5V Pegel zu D+/D-. Der AVR natürlich schon, aber ich habe die 3,6V Z-Dioden drinnen. Der Pulldown auf D- ist auch drinnen.
Ich hatte mal bei einem USB IR-Empfänger mit 2313 genau das gleiche Problem, dass es an manchen Geräten/Boards lief und an anderen nicht. Ursache war ganz klar die Intoleranz der USB Schnittstellen in Bezug auf die Spannung. Nachdem ich verschiedene 3,6V Zenerdioden ausprobiert und ausgemessen habe, lief es dann problemlos. Habe seit ca. 6 Monaten einen Tiny45 mit V-USB zur Heizungssteuerung im Einsatz und läuft selbst mit internem Oszillator ohne Probleme. Einmal pro Minute wird die Temperatur von 2 DS18s20 ausgelesen und wenn notwendig ein Low oder High an den 45er geschickt. Lasst doch bitte mal die Polemik mit internem USB (Stack) etc. - Wir basteln und da ist SMD nach wie vor eine (noch) vermeidbare Herausforderung. Beitrag "USB Temperatursensor: USBTemp" VG, seit_z80
seit_z80 schrieb: > Der AVR natürlich schon, aber ich habe die 3,6V Z-Dioden drinnen. Der > Pulldown auf D- ist auch drinnen. Laut Spezifikation muss D+/D- zwischen 2,7 und 3,6V sein. Probier einfach mal eine 3,3V-Z-Diode anstatt am oberen Limit zu arbeiten.
Hi, ich habe hierzu ein Update. Nachdem ich nun für die Delphi Host-Software die HID-Komponente von JVCL. Geht es eigentlich fast ohne Probleme. Werde den Code noch zusammenräumen und dann das Projekt mit einer Demo Host Software zur Verfügung stellen. Vielen Dank für die Hilfe von allen!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.