forum logo image
caferacer-forum.de - Das Forum für Petrolheads, Garagenschrauber, Ölfinger, Frickelracer und Alteisentreiber

Tastersteuerung Anfrage

Technische Fragen und Antworten, Tipps und Tricks für Profis und Bastler
Benutzeravatar
Nille
Beiträge: 1765
Registriert: 8. Feb 2013
Motorrad:: Honda CB 750 Four K7, Bj 78
Yamaha XS 360 1u4 , Bj 77
DT 250 MX, Bj 78
XS 650 3L1, Bj 79
Triumph Bonneville pre Efi, 2007

Re: Tastersteuerung Anfrage

Beitrag von Nille »

Geil, dachte schon das Vorhaben ist gestorben :)
Ab wann soll das Teil in "Serie" gehen?
Und gibt es schon ne ungefähre Preisvorstellung?

Weiterhin viel Erfolg [emoji106]

Gruß,
Nille


Benutzeravatar
Tomster
(ehem. Moderator) † Ruhe in Frieden †
Beiträge: 2736
Registriert: 28. Nov 2015
Motorrad:: Yamah SR500T, TRX 850, Suzuki GR650X, BMW R100/7, Indian FTR 1200S
Wohnort: Hansestadt Wesel a.R.

Re: Tastersteuerung Anfrage

Beitrag von Tomster »

NyFAZ hat geschrieben: 20. Dez 2018 Tom, wenn das Teil in der Konfiguration praxiserprobt ist, bist Du mein zweiter Testdummy ;)
Wenn ich günstig an die MosFets komme baue ich Dir noch eins zusammen, will hier jedoch kein verbindliches Versprechen abgeben.
LG Roland
Hört sich prima an, Roland. .daumen-h1:

Bis dahin
Tom
Chrom bringt dich nicht nach Hause.
—> Mad Aces Founding Member <—

SebastianM
Beiträge: 1287
Registriert: 2. Sep 2015
Motorrad:: ..
Wohnort: Vaterstetten

Re: Tastersteuerung Anfrage

Beitrag von SebastianM »

Hey Roland,
Falls du ein Gehäuse brauchst sag bescheid... Hab einen 3d drucker.

Mfg Basti

Benutzeravatar
NyFAZ
Beiträge: 288
Registriert: 2. Nov 2016
Motorrad::  
BMW R80
KTM LC400 Mil
Wohnort: Braunschweig

Re: Tastersteuerung Anfrage

Beitrag von NyFAZ »

Hallo Basti,

vielen Dank für Dein Angebot. Ich habe einen dreiviertel Prototypen fertig (muss mir Anfang nächster Woche noch Kabel besorgen) und es wird erst ernst wenn eine Platine entstanden ist. Wenn hier großes Interesse herrscht kann ich alle Einzelheiten schon jetzt veröffentlichen. Dann können die gelernten Eletroniker drüberschauen :)

LG Roland

Benutzeravatar
Wigbold
Beiträge: 92
Registriert: 13. Apr 2014
Motorrad:: Boldor

Re: Tastersteuerung Anfrage

Beitrag von Wigbold »

NyFAZ hat geschrieben: 19. Dez 2018 So, liebe Gemeinde. Langsam wird es ernst.

9D50EA07-0004-4B14-A568-4012717F61D0.jpeg


LG Roland
Klasse. :respekt:

Wie groß muß man sich das Ganze vorstellen ?

Vergleichsmaßstabfehlenderweise, Wigbold

Benutzeravatar
NyFAZ
Beiträge: 288
Registriert: 2. Nov 2016
Motorrad::  
BMW R80
KTM LC400 Mil
Wohnort: Braunschweig

Re: Tastersteuerung Anfrage

Beitrag von NyFAZ »

Hallo Wigbold, die Platine hat die Grundmaße von 5x7cm. Das ist jedoch der Prototyp mit Potential :).

LG Roland

Aceli
Beiträge: 168
Registriert: 2. Jul 2013
Motorrad:: Ducati Monster 620
Ducati ST2

Re: Tastersteuerung Anfrage

Beitrag von Aceli »

Bin schon ganz gespannt ;)


Gesendet von iPad mit Tapatalk
Projekt : Ducati ST 2

Aceli
Beiträge: 168
Registriert: 2. Jul 2013
Motorrad:: Ducati Monster 620
Ducati ST2

Re: Tastersteuerung Anfrage

Beitrag von Aceli »

Darf man nochmal nachhaken wie weiter das ganze ist :D
Projekt : Ducati ST 2

Benutzeravatar
NyFAZ
Beiträge: 288
Registriert: 2. Nov 2016
Motorrad::  
BMW R80
KTM LC400 Mil
Wohnort: Braunschweig

Re: Tastersteuerung Anfrage

Beitrag von NyFAZ »

Ich stelle alle Quellen und den Sourcecode hier zur Verfügung. Habe momentan und längerfristig keine Zeit für das Projekt. Somit kann sich das jeder nachbauen (lassen), ohne auf mich angewiesen zu sein. Fragen zur Software kann ich immer mal beantworten, geht ja schnell.

LG Roland

Benutzeravatar
NyFAZ
Beiträge: 288
Registriert: 2. Nov 2016
Motorrad::  
BMW R80
KTM LC400 Mil
Wohnort: Braunschweig

Re: Tastersteuerung Anfrage

Beitrag von NyFAZ »

Hallo alle,

anbei, wie im letzten Post versprochen, mein Code für meine Zentralelektrik.
Ich hatte das ganze auf einen ATTiny84 programmiert, geht natürlich auch auf einen ATmel328(Arduino).
Dank an Jurs aus dem Arduino-Forum.

Als Hardwarelösung würde ich jedem interessierten folgenden Schaltplan vom Mikrocontrollerforum ans Herz legen:
https://www.mikrocontroller.net/attachm ... scheme.png

Leider komme ich momentan nicht dazu ein Prototypen zu Ende zu bauen, zu viele Baustellen. Fragen beantworte ich gerne, bin aber nicht täglich hier ;)

LG Roland

Code: Alles auswählen

/*
Programmierung auf ATTiny84, Pins gemäß Anordnung

Pin1	Zündungsplus(Klemme15)		Pin14	Masse(Klemme31)
Pin2	Ausgang Abblendlicht			Pin13	Eingang Taster Blinker links
Pin3	Ausgang Anlasser				Pin12	Eingang Taster Blinker rechts
Pin4	RESET						Pin11	Eingang Taster Fernlicht
Pin5	Ausgang Hupe				Pin10	Eingang Taster Hupe
Pin6	Ausgang Fernlicht				Pin9	Eingang Starttaster
Pin7	Ausgang Blinker links			Pin8	Ausgang Blinker rechts

*/


#define BUTTONLEFT 0 // digitaler Eingang linker Taster
#define BUTTONRIGHT 1 // digitaler Eingang rechter Taster
#define BUTTONLIGHT 2 // digitaler Eingang Fernlichttaster
#define BUTTONWARN 3 // digitaler Eingang Hupentaster
#define BUTTONSTART 4 // digitaler Eingang Motor an

#define BLINKPINRIGHT 5 // digitaler Ausgang rechter Blinker
#define BLINKPINLEFT 6 // digitaler Ausgang linker Blinker
#define LIGHTPIN 7 // digitaler Ausgang Lichtumschaltung
#define WARNPIN 8 // digitaler Ausgang Hupe
#define STARTPIN 9 // digitaler Ausgang Anlasser
#define ABLIGHTPIN 10 // digitaler Ausgang Abblendlicht

#define DEBOUNCETIME 10 // Zeit zum Entprellen in Millisekunden
#define LONGKEYPRESSTIME 250 // Zeit ab der ein Tastendruck "lang" ist
#define BLINKDELAY 500 // Blinkintervall
#define BLINKCOUNT 3 // Anzahl der Blinkimpulse bei kurzem Tastendruck

byte Fernlicht=false;
byte Starter=false;

void setup()
{
pinMode(BUTTONLEFT, INPUT_PULLUP);
pinMode(BUTTONRIGHT, INPUT_PULLUP);
pinMode(BUTTONLIGHT, INPUT_PULLUP);
pinMode(BUTTONWARN, INPUT_PULLUP);
pinMode(BUTTONSTART, INPUT_PULLUP);

// Die vier LED-Pins auf digitalen Output schalten
pinMode(BLINKPINLEFT, OUTPUT);
pinMode(BLINKPINRIGHT, OUTPUT);
pinMode(LIGHTPIN, OUTPUT);
pinMode(WARNPIN, OUTPUT);
pinMode(STARTPIN, OUTPUT);
pinMode(ABLIGHTPIN, OUTPUT);

digitalWrite(ABLIGHTPIN, HIGH);

}

void loop()
{
blinkTask();
}

void blinkTask()
{
static byte keystate=0; // Tastenstatus: je 4 Bit letzter und aktueller Tastenstatus
static byte keystate2=0; // Tastenstatus: je 4 Bit letzter und aktueller Tastenstatus
static byte blinkstate=0; // Blinkstatus in den untersten 2 Bits
static unsigned long lastTaskRun=0; // Zeit wann der Task zum letzten mal gelaufen ist
static unsigned long startBlinkMillis=0; // Zeitpunkt beim Setzen des Blinkers
static unsigned long startBeamMillis=0; // Zeitpunkt beim Tasten des Fernlichts
static byte shortButtonPress=false; // Wird true sobald ein kurzer Tastendruck erkannt wurde
static byte shortBeamPress=false; // Wird true sobald ein kurzer Tastendruck erkannt wurde

if (millis()-lastTaskRun<DEBOUNCETIME) return; // Task soll nur einmal pro DEBOUNCETIME laufen
lastTaskRun=millis();
setCurrentKeystate(keystate, keystate2);
handleStateChange(keystate, keystate2, blinkstate, startBlinkMillis, startBeamMillis, shortButtonPress, shortBeamPress, Starter);
handleBlinkState(blinkstate, millis()-startBlinkMillis, shortButtonPress, shortBeamPress);
if (Starter!=true)
{
handleBeam(Fernlicht);
handleLight(Fernlicht);
}
}

void handleLight(byte Fernlicht)
{
if (Fernlicht==true)
digitalWrite(ABLIGHTPIN, LOW);
if (Fernlicht!=true)
digitalWrite(ABLIGHTPIN, HIGH);
}

void handleBeam(byte Fernlicht)
{
if ((digitalRead(LIGHTPIN)!=HIGH) && (Fernlicht==true))
digitalWrite(LIGHTPIN,HIGH);
if ((digitalRead(LIGHTPIN)==HIGH) && (Fernlicht==false))
digitalWrite(LIGHTPIN,LOW);
}

void setCurrentKeystate(byte &state, byte &state2)
{
state= state<<4; // Den alten Status um 4 Bit nach links schieben
state2= state2<<4; // Den alten Status um 4 Bit nach links schieben
bitWrite(state,3,!digitalRead(BUTTONWARN)); // neuer Status Warn-Taste in Bit-3
bitWrite(state,2,!digitalRead(BUTTONLIGHT)); // neuer Status Licht-Taste in Bit-2
bitWrite(state,1,!digitalRead(BUTTONLEFT)); // neuer Status linke Taste in Bit-1
bitWrite(state,0,!digitalRead(BUTTONRIGHT));// neuer Status rechte Taste in Bit-0
bitWrite(state2,0,!digitalRead(BUTTONSTART)); // neuer Status linke Taste in Bit-0
}

void handleStateChange(byte keystate, byte keystate2 ,byte &blinkstate, unsigned long &startBlinkMillis, unsigned long &startBeamMillis, byte &shortButtonPress, byte &shortBeamPress, byte &Starter)
{
switch (keystate)
{
case 0b00000010: // Übergang 0000 nach 0010 = Blinker links wurde soeben gedrückt
if (blinkstate==0b11) // Wenn Blinkstatus "Warnblinker"
{
blinkstate=0b00; // Warnblinker aus
break;
}
if (blinkstate==0b10) // Wenn Blinkstatus "Blinker links"
blinkstate=0b00; // Blinker Stopp
else
{
blinkstate=0b10; // Blinker Links setzen
startBlinkMillis=millis();
}

shortButtonPress=false; // Flag für kurzen Tastendruck löschen
break;

case 0b00000001: // Übergang 0000 nach 0001 = Blinker rechts wurde soeben gedrückt
if (blinkstate==0b11) // Wenn Blinkstatus "Warnblinker"
{
blinkstate=0b00; // Warnblinker aus
break;
}

if (blinkstate==0b01) // Wenn Blinkstatus "Blinker rechts"
blinkstate=0b00; // Blinker Stopp
else
{
blinkstate=0b01; // Blinker Rechts setzen
startBlinkMillis=millis();
}

shortButtonPress=false; // Flag für kurzen Tastendruck löschen
break;

case 0b00000100: // Übergang 0000 nach 0100 = Fernlichttaster wurde soeben gedrückt
if (Fernlicht) //Wenn Fernlichtflag aktiv
{
Fernlicht=false;
}
else
{
Fernlicht=true;
startBeamMillis=millis();
}
shortBeamPress=false; // Flag für kurzen Tastendruck löschen
break;

case 0b10001000: // Taster gehalten 1000 nach 1000 = Hupentaster wird gehalten (Zweiter Durchgang: Bit 3+8 auf HIGH)
digitalWrite(WARNPIN,HIGH);
break;
}

switch (keystate2)
{
case 0b00000001: // Starttaster wird gerade gedrückt
digitalWrite(ABLIGHTPIN, LOW);
digitalWrite(LIGHTPIN, LOW);
digitalWrite(STARTPIN,HIGH);
Starter=true;
break;

case 0b00010001: // Starttaster wird gehalten

break;

case 0b00010000: // Starttaster wurde gerade los gelassen
digitalWrite(STARTPIN,LOW);
digitalWrite(ABLIGHTPIN, HIGH);
digitalWrite(LIGHTPIN, LOW);
Starter=false;
//Theoretisch auf D+ testen ob Motorlauf vorhanden
break;
}

//Hupe ausschalten wenn Taster nicht mehr gedrückt wird, unabhängig der anderen Zustände
if (!bitRead(keystate,3))
digitalWrite(WARNPIN,LOW);

// Sonderfall Warnblinker wenn Links/Rechts gedrückt,
// aber vorher nicht beide Tasten schon gedrückt waren
// Übergang von "nicht beide gedrückt" auf "beide gedrückt"
if ((keystate & 0b11) == 0b11 && (keystate & 0b00110000) < 0b00110000)
blinkstate=0b11;

// Sonderfall kurzer Tastendruck beim Links- oder Rechtsblinken
if (keystate==0 && millis()-startBlinkMillis<LONGKEYPRESSTIME && (blinkstate==0b10 || blinkstate==0b01))
shortButtonPress=true;

// Sonderfall kurzer Tastendruck beim Links- oder Rechtsblinken
if (keystate==0 && millis()-startBeamMillis<LONGKEYPRESSTIME && Fernlicht==true)
shortBeamPress=true;

}


void handleBlinkState(byte &blinkstate, unsigned long blinkTime, byte &shortButtonPress, byte &shortBeamPress)
{
boolean blinkPhase, currentOn;

// Prüfen, ob nach Einschalten mit kurzem Buttondruck die Blinkdauer abgelaufen ist
if (shortButtonPress && blinkTime>=(BLINKCOUNT*2-1)*BLINKDELAY && (blinkstate==0b01 || blinkstate==0b10))
blinkstate=0b00; // falls ja, Blinken hier automatisch beenden

// Lichthupe
if (shortBeamPress && Fernlicht==true)
Fernlicht=false;

if ((blinkTime/BLINKDELAY)%2==0)
blinkPhase=true;
else
blinkPhase=false;

// Soll der linke Blinker gerade an sein?
currentOn=bitRead(blinkstate,1) && blinkPhase;
if (digitalRead(BLINKPINLEFT)!=currentOn)
digitalWrite(BLINKPINLEFT,currentOn);

// Soll der rechte Blinker gerade an sein?
currentOn=bitRead(blinkstate,0) && blinkPhase;
if (digitalRead(BLINKPINRIGHT)!=currentOn)
digitalWrite( BLINKPINRIGHT,currentOn);
}

Antworten

Zurück zu „Elektrik/Beleuchtung“

...cooles Zeug