Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

Problem mit Relaiskarte -> Linux (GELÖST)

Monitor-Tester, Relaiskarte, Bluetooth, Xilinx usw.
Antworten
  • Druckansicht
Erweiterte Suche
7 Beiträge • Seite 1 von 1
Lucky001
Beiträge: 3
Registriert: 29.09.2010, 10:09:50

Problem mit Relaiskarte -> Linux (GELÖST)

  • Zitieren

Beitrag von Lucky001 » 29.09.2010, 10:17:27

Hallo,

ich hab ein kleines Problem mit der Relaiskarte unter Linux.
Die Karte ist programmiert und funktionsbereit. Das Problem ist wenn mein Linux (Ubuntu 10.4) startet bzw. wenn man die Karte ansteckt, spricht das System die Karte an und man hört eine Relaismelodie :D. Das ist allerdings nicht so schön für das was ich steuern will.

Hat jemand einen Lösungsansatz das zu unterbinden?

Danke.
Nach oben

Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Re: Problem mit Relaiskarte

  • Zitieren

Beitrag von Thomas » 29.09.2010, 12:04:53

Zunächst einmal ist es schön, das es endlich wieder einen Kernel gibt, mit dem CDC low-speed wieder funktioniert, das war einige zeit nur mit einem händisch geänderten Kernel möglich.

(Beschreibung funktionierender Kernel: http://www.recursion.jp/avrcdc/driver.html)

Ich würde das Programm der Relaiskarte in soweit ändern, dass zunächst eine Initialisierungssequenz gesendet werden muss, bevor die Karte schalten kann.

Gruß
Thomas
Nach oben

Lucky001
Beiträge: 3
Registriert: 29.09.2010, 10:09:50

Re: Problem mit Relaiskarte

  • Zitieren

Beitrag von Lucky001 » 01.10.2010, 10:12:36

Genau das wollte ich ja vermeiden, da ich mich erst reindenken muss. Aber es war einfacher als ich dachte. Jetzt muss man erst die Zeichenkette "relais" schicken bevor man die Karte zum schalten bewegen kann (jedesmal). Trotzdem danke für den Tip.

Gruß Lucky.
Nach oben

Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Re: Problem mit Relaiskarte

  • Zitieren

Beitrag von Thomas » 01.10.2010, 11:45:28

Lucky001 hat geschrieben: .... Aber es war einfacher als ich dachte. ...
Schön, das du es versucht und geschafft hast. Wenn du jetzt dem Forum deine Änderung zeigen würdest...
Nach oben

Lucky001
Beiträge: 3
Registriert: 29.09.2010, 10:09:50

Re: Problem mit Relaiskarte

  • Zitieren

Beitrag von Lucky001 » 01.10.2010, 13:51:55

lol....Ok.

Also ich hab in der Datei "usbdrv/usbdrv.c" erstmal ein paar globale Variablen definiert:

Code: Alles auswählen

int test1=0;
int test2=0;
int test3=0;
int test4=0;
int test5=0;
int test6=0;
Und die Funktion "usbProcessRx" sieht am Anfang so aus:

Code: Alles auswählen

static void usbProcessRx(uchar *data, uchar len)
{
usbRequest_t    *rq = (void *)data;
uchar           replyLen = 0, flags = USB_FLG_USE_DEFAULT_RW;
/* We use if() cascades because the compare is done byte-wise while switch()
 * is int-based. The if() cascades are therefore more efficient.
 */
/* usbRxToken can be:
 * 0x2d 00101101 (USBPID_SETUP for endpoint 0)
 * 0xe1 11100001 (USBPID_OUT for endpoint 0)
 * 0xff 11111111 (USBPID_OUT for endpoint 1)
 */
    DBG2(0x10 + ((usbRxToken >> 1) & 3), data, len);    /* SETUP0=12; OUT0=10; OUT1=13 */
#if USB_CFG_IMPLEMENT_FN_WRITEOUT
    if(usbRxToken == 0xff){
        switch(*data)
	{
	case 0x72:
		if((test1 == 0) && (test2 == 0) && (test3 == 0) && (test4 == 0) && (test5 == 0) && (test6 == 0))
			test1 = 1;
		break;
	case 0x65:
		if((test1 == 1) && (test2 == 0) && (test3 == 0) && (test4 == 0) && (test5 == 0) && (test6 == 0))
			test2 = 1;
		break;
	case 0x6c:
		if((test1 == 1) && (test2 == 1) && (test3 == 0) && (test4 == 0) && (test5 == 0) && (test6 == 0))
			test3 = 1;
		break;
	case 0x61:
		if((test1 == 1) && (test2 == 1) && (test3 == 1) && (test4 == 0) && (test5 == 0) && (test6 == 0))
			test4 = 1;
		break;
	case 0x69:
		if((test1 == 1) && (test2 == 1) && (test3 == 1) && (test4 == 1) && (test5 == 0) && (test6 == 0))
			test5 = 1;
		break;
	case 0x73:
		if((test1 == 1) && (test2 == 1) && (test3 == 1) && (test4 == 1) && (test5 == 1) && (test6 == 0))
			test6 = 1;
		break;
	default:
		if((test1 == 1) && (test2 == 1) && (test3 == 1) && (test4 == 1) && (test5 == 1) && (test6 == 1))
        		usbFunctionWriteOut(data, len);
		test1 = 0;
		test2 = 0;
		test3 = 0;
		test4 = 0;
		test5 = 0;
		test6 = 0;
		break;
	}
        return; /* no reply expected, hence no usbMsgPtr, usbMsgFlags, usbMsgLen set */
    }
#endif
    if(usbRxToken == (uchar)USBPID_SETUP){
        usbTxLen = USBPID_NAK;  /* abort pending transmit */
        if(len == 8){   /* Setup size must be always 8 bytes. Ignore otherwise. */
            uchar type = rq->bmRequestType & USBRQ_TYPE_MASK;
            if(type == USBRQ_TYPE_STANDARD){
                #define SET_REPLY_LEN(len)  replyLen = (len); usbMsgPtr = replyData
Und das fertige Programm hab ich angehängt, falls es jemanden interessiert.

Gruß
Lucky
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Nach oben

Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Re: Problem mit Relaiskarte

  • Zitieren

Beitrag von Thomas » 01.10.2010, 17:08:17

Danke, das interessiert früher oder später auf jeden Fall jemanden. Evtl. wird auch noch weiter verbessert/erweitert. Man weiß ja nie ;-)

Gruß
Thomas
Nach oben

Cybso
Beiträge: 10
Registriert: 29.09.2010, 18:06:17

Re: Problem mit Relaiskarte -> Linux (GELÖST)

  • Zitieren

Beitrag von Cybso » 10.10.2010, 02:22:43

Siehe auch meine Firmware-Änderungen im Nachbar-Thread. Dort erwartet die Relaiskarte initial eine Sequenz von 16 aufeinanderfolgenden 0xC0-Bytes (0b11000000), was den Vorteil hat, dass bei einer Original-Firmware ohne diese Änderung kein Relais "versehentlich" eingeschaltet wird.
Nach oben

Antworten
  • Druckansicht

7 Beiträge • Seite 1 von 1

Zurück zu „Meine Projekte (Archiv)“



  • Foren-Übersicht
  • Alle Zeiten sind UTC+02:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum