'**************************************************************** '* Name : Toeren meting * '* Author : Dennis Smits * '* Notice : All Rights Reserved * '* : * '* Date : 08/03/2016 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** Device 16F628A ;de PIC16F628A Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF Declare Xtal = 20 All_Digital true Dim Toeren_raw As Word Dim Toeren As Word Dim Toeren_grens As Word Dim I As Byte Dim sport_uit As Byte Symbol input_ignition = PORTA.0 ;frequentiemeting op bobine kabel portA.0 (pin 17) Symbol input_temp = PORTA.1 ;temperatuur meting op portA.1 (pin 18) Symbol input_sport_eco = PORTA.2 ;keuze schakelaar voor sportieve rijstijl of economische rijstijl op portA.2 (pin 1) Symbol Led_groen = PORTB.0 ;Groene led voor startup check portB.0 (pin 6) Symbol Led_blauw = PORTB.1 ;Blauwe led voor 1e melding gear change portB.1 (pin 7) Symbol Led_rood = PORTB.2 ;Rode led 2e melding gear change portB.2 (pin 8) ; PIC16F627A/628A/648A ; +---¦---+ ; RA2/AN2/VREF <-> ¦1 18¦ <-> RA1/AN1 ; RA3/AN3/CMP1 <-> ¦2 17¦ <-> RA0/AN0 ; RA4/T0CKI/CMP2 <-> ¦3 16¦ <-> RA7/OSC1/CLKIN ; RA5/MCLR/VPP <-> ¦4 15¦ <-> RA6/OSC2/CLKOUT ; VSS (GND) -> ¦5 14¦ <- VDD ; RB0/INT <-> ¦6 13¦ <-> RB7/T1OSI/PGD ; RB1/RX/DT <-> ¦7 12¦ <-> RB6/T1OSO/T1CKI/PGC ; RB2/TX/CK <-> ¦8 11¦ <-> RB5 ; RB3/CCP1 <-> ¦9 10¦ <-> RB4/PGM ; +-------+ ; TRISB = %0000000 ;PORTB.0t/m 7 als uitgangen instellen TRISA = %0001111 ;PORTA.0t/m 3 als ingangen instellen Led_groen = 1 ;Groene led voor 3 seconden oplichten als teken dat systeem actief wordt DelayMS 2000 Led_groen = 0 If input_sport_eco = 1 Then ;Als bij het opstarten de sportmudus aan staat laat hij een waarschuwing zien For I=0 To 3 ;Hij doet deze lus 3 keer Led_rood = 1 ;Led gaat halve seconde aan DelayMS 500 Led_rood = 0 ;Led gaat halve seconde uit DelayMS 500 Next ;Er wordt 1 opgeteld bij I EndIf While 1 = 1 ;Hoofdprogramma loop If input_sport_eco = 0 Then sport_uit = 1 ;Er wordt gekeken of de sportstand uit staat. Toeren_raw = Counter input_ignition, 1000 ;De variabele Toeren wordt nu gevuld met het aantal pulsen per 1 seconden vanuit input_ignition (pin 17) Toeren = (Toeren_raw*60)/4 ; omzetting van toeren per 1 sec naar toeren per minuut ;omzetting van 4 pulsen in de bobine naar 1 rotatie If input_temp = 0 Then Toeren_grens = Toeren + 500 ; bepaling van de toeren waarbij geschakeld moet worden met koude motor (dan moet er eerder worden geschakeld) If input_temp = 1 Then Toeren_grens = Toeren ;bepaling van de Toeren waarbij geschakeld moet worden met warme motor, indien de motor warm is dan mag er bij een hoger toerental worden geschakeld If input_sport_eco = 1 And input_temp = 1 Then Toeren_grens = Toeren - 1000; als sport stand aan staat en de motor warm is, toeren verhogen met 1000 (er wordt dan later geschakeld) Select Toeren_grens Case 3000 To 3500 ;indien toeren tussen 3000 en 3500 is wordt geadviseerd om te schakelen Led_blauw = 1 ;de blauwe led gaat aan Led_groen = 0 ;de overige kleuren zijn gedoofd Led_rood = 0 ;de overige kleuren zijn gedoofd Case 3500 To 6000 ;indien toeren tussen 3500 en 4000 is wordt dringend geadviseerd om te schakelen Led_blauw = 0 ;de overige kleuren zijn gedoofd Led_groen = 0 ;de overige kleuren zijn gedoofd Led_rood = 1 ;de rode led gaat aan Case Else Led_blauw = 0 ;de overige kleuren zijn gedoofd Led_groen = 0 ;de overige kleuren zijn gedoofd Led_rood = 0 ;de overige kleuren zijn gedoofd EndSelect ;While input_temp > 100 ;Waarschuwing voor oververhitting van de motor ;Led_rood = 1 ;Led gaat halve seconde aan ;DelayMS 500 ;Led_rood = 0 ;Led gaat halve seconde uit ;DelayMS 500 ;Wend ;End while input_temp If sport_uit = 1 And input_sport_eco = 1 And input_temp = 1 Then ;Bepaling of de laatste stand eco was en nu sport For I=0 To 3 ;Hij doet deze lus 3 keer Led_groen = 1 ;Led gaat halve seconde aan DelayMS 500 Led_groen = 0 ;Led gaat halve seconde uit DelayMS 500 Next sport_uit = 0 ;sport_uit wordt op 0 gezet zodat er geen constante loop ontstaat. EndIf Wend ;End while hoofdprogramma End