Moottoripyoeraen Vaihdenaeyttoe

Mooottoripyörän vaihdenäytön rakennusohjeet

Tämä kirjoitus on ollut Electronics Design lehdessä. Lontoo, vuonna 2000
Tämä laiten siis näyttää kuljettajalle, mikä vaihde on käytössä.
Hieman epäilin tämän laitteen tarpeellisuutta, mutta suomalainen kaveri sanoi sitä tarvittavan.
No en kuitenkaan itse käyttänyt sitä.
Tuossa lehdessä oli kaikki ohjelmakoodit ja hex-koodit mukana.
http://www.audiodesignguide.com/articles/Power_Follower/Electronics_World_pg1.jpg

GEAR.GIF
GEAR.JPGGEARLAY.PDF
GEAR.PDF
GEARPIC.JPG
GINSIDE.JPGMOTO2.JPG
MOTO3.JPG

/**
d:\pic\2001\moottoripyora\moott2.c
Moottoripyörä Matti Virta
Piirillä 16F84-20/P 4MHz kello
Pekka Ritamäki/PROBYTE OY puh 03-2661885
Käännä CCS/PCW/PCM:llä v 2.73
Tässä on Matti Virran raportti, mitä pitäsi tehdä

vaihteet vapaa=maadoittaa kytkimen
no:1 alaspäin painetaan vaihdevipua= 1
2 vaihdetaan ylöspäin=2
3,4,5,6 sama kuin 2
siis vapaa=0=maadoittaa=1, ja 2, välissä
taitaa olla hankalaa kun sama kytkin ensi 1, alas.
toinen kytkin 2,3,4,5,6,
ja sama toisinpäin kun vaihtaa alas/pienempään eli 6,5,4,3,2,1 kaikki samalta kytkimeltä
mekaniikka on akselissa on vipu jonka kummallakin puolella kykin, alas/ylös
jos sulla on ollut mopo/moottorip, tiedät mitä tarkoitan
vapaa on 1ja 2 välissä
tämänyt oli saman sanomista useaan kertaan mutta kun en osaa selittää oikein hyvin

vaihde=suunta
1=alhaalla 6
n=ylös tai pulivälissä 5
2=ylös 4
3=ylös 3
4=ylös 2 s 1
5=ylös n --o--
6=ylös> 1 s 2
5=alas
4=alas
3=alas vipu kytkimet s1 ja s2 jos vaihde 1 niin s1
2=alas o=akseli
N=alas tai puliväliin ei kokonaan paineta vipua
1=alas
miten on edistynyt ? ei kiirettä pyörä on palasina,sain eilen vasta takahaarukan maalattua
vielä on runko maalaamatta+moottori purkaminen+tiivisteet+katteet+kasaus
/
/
(C) Copyright 1998,1999,2000 PROBYTE
/

#device PIC16F84A
#include <16F84A.h>
#rom 0x2100={1,0,1,0,1}

/* EEPROM osoiteessa 3 on osoite '0'm voit vaihtaa sen kalibrointikomennolla */
#use delay(clock=4000000, restart_wdt)

#fuses HS,NOWDT,PROTECT
#fuses HS,PROTECT,NOWDT,PUT
/* VAKIOT ISOLLA ***/
#define INPUT_MODE_B 0b11111111
#define OUTPUT_MODE_B 0b10011111
#define READY 1
#BYTE timer0 =1
#byte PORTB = 6
//#BYTE PORTC =7

#BYTE PORTA =5
#bit VAPAA=PORTA.1
#bit DOWN=PORTA.2
#bit UP=PORTA.3

#use rs232(baud=2400, RESTART_WDT, invert,xmit=PIN_B6, rcv=PIN_B7)
#use fast_IO(B) // fast io ei käsittele suuntarekistereitä käskyissä!
//#use fast_io(A)
#define OFF 1
#define ON 0
#define all_out 0
#define all_in 0xff
#define LED_ON 0
#define LED_OFF 1

/* anturi ovat yleensä 2.0 C korpeampia kuin todellinen siki tämä vakio korjaus*/
#ROM 0x1ff={0xcb0} // tee tämä kalibrointi vain JW-malleille, joista on hävinnyt kalibrointitieto!
/* muuttujat /
#ID 010505
byte mode, pre_mode ;
byte x;
byte dat;
const byte seg[25]={0x3f,6, 6, 0x5b,0x5b, 0x4f,0x66,0x6D ,0x7c, 1,2,3,4,5,6,7,0xff,0xff,0xff,0xff};
/* 0, 1, 1, 2, 3, 4 , 5, 6 , */
/

pyöritä ledejä aluksi ja jos anturi ei ole paikalla
***/
void testi( void) {
delay_ms(200);
x= seg[0];
PORTB =~x;
delay_ms(200);
x= seg[1];
PORTB =~x;
delay_ms(200);
x= seg[2];
PORTB = ~x;
delay_ms(200);
x= seg[3];
PORTB = ~x;
delay_ms(200);
x= seg[4];

PORTB = ~x;
delay_ms(200);
x= seg[5];
PORTB = ~x;
delay_ms(200);
x= seg[6];
PORTB = ~x;
delay_ms(200);

x= seg[7];
PORTB = ~x;
delay_ms(200);
x= seg[8];
PORTB = ~x;
delay_ms(500);

}

void viive ( void) {
int tim,i;
tim = read_eeprom( 0); // 0. eeprommuistipaikka = viive sekuntteina
for(i=0; i< tim; i++)
delay_ms(1000);
}

void vali_viive( void) {
int x;
x=50;
portb=(~dat) & 0x7F; // data + piste
while(x—) {
if( (porta & 0xE) != 0xE)
x= 50;
delay_ms(1); // 50 ms viive aina
portb=(~dat) ; // data + piste
}
}
void main ( void) {

set_tris_a( 0x1F); // LEDT ja RELE ou , temp bit input
set_tris_b( 0x00); // DIP in
while (1) {
for(dat =0 ; dat< 8; dat++)
// PORTB=dat;
// delay_ms(100);
// }
// setup_counters(RTCC_INTERNAL,WDT_1152MS);
port_b_pullups( TRUE);
restart_wdt();
PORTB=0;// kaikki päälle
delay_ms(100);
mode =0;
pre_mode =0;
testi();
//delay_ms ( 500);

dat = seg[mode];
portb= ~dat;
while (1) {

if( (porta & 0xE) != 0xE) {

switch ( mode) {
case 0 : if( !DOWN ) // tästä aloitetaan näyttö =1
mode =1;
pre_mode =0; // suuntatieto alhaalta ylös
break;
case 1 : if ( !VAPAA && ( pre_mode==0))
mode=2; // poljin ylös taas vapaalle = näyttö on 1
if ( !VAPAA && ( pre_mode==1))
mode=0; // poljin ylös taas vapaalle = näyttö on 1

break;
case 2 : // näyttö on 2
case 3 : // näyttö on 3
case 4 : // näyttö on 4
case 5 : // näyttö on 5
case 6 : // näyttö on 6
case 7 :
case 8 : if ( (mode==2) && !VAPAA)
mode=1; // poljin alas -> vapaalle = näyttö on 1
else {
if( !UP )
mode++;
if( !DOWN)
mode—;

if( (mode > 2 ) && (!VAPAA))
mode =0; // virhe
if ( (mode==2) && !DOWN && ( pre_mode==1))
mode=1; // poljin alas -> vapaalle = näyttö on 1
}
pre_mode =1; // suuntatieto
break;
default:
} // switch end
if ( mode>8) mode=8;
dat = seg[mode];
portb= ~dat; // päivitä vain jos muutos

vali_viive(); // odota kuunnes kytkin auki
} // if end

// dat = seg[mode];
// portb= ~dat;

}
/* while end */
}
/** moott2.c end ***/
Pekka OH3GDO

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License