articol recuperat si postat pe arduinotehniq.com in 01.2016


* publicare articol in 18.04.2013 de catre niq_ro
* autorul materialului este Daniel Gelep

Bord electronic scuter (motocicleta/masina)
cu ATmega8

       Varianta de bord electronic foloseste un microcontroler AVR de tip ATmega8 prezentand informatii pe un afisaj cu 4 randuri si 16 coloane:
- pe primul rand, temperatura in 2 zone, in grade Celsius (senzori tip LM35);
- pe al doilea rand, tensiunea bateriei, in volti;
- pe a treilea rand, turatia motorului, in rotatii pe minut (senzor inductiv... spire infasurate pe cablul care vine de la CDI la bobina de inductie);
- pe al patrulea rand, viteza scuterului (motocicletei, masinii) in km/ora (senzor Hall TLE4905);
       Un prim film de prezentare se numeste bord electronic:


       Schema de principiu a acestei variante este:
bord electronic vers.1 Dan Gelep - cu afisaj 4 randuri si 16 coloane
bord electronic vers.1 Dan Gelep - cu afisaj 4 randuri si 16 coloane

       Rezistenta R6 are rolul de a limita tensiunea maxima care vine de la senzorul inductiv sa fie maxim 5V.
       Rezistenta R4 are rolul de a limita tensiunea de la baterie aplicata pe pinul convertorului A/D la maxim 5V
       Aceste reglaje se vor face cu microcontrolerul scos din soclu pentru a nu-l distruge.
       TIMPI este un jumper care seteaza tipul de motor al scuterului ( 2 timpi/4 timpi )

       O varianta de montaj poate fi:
bord electronic vers.1 Dan Gelep - cu afisaj 4 randuri si 16 coloane bord electronic vers.1 Dan Gelep - cu afisaj 4 randuri si 16 coloane

     Pentru a realiza cablajul, va pun la dispozitie cele 2 variante rezultate:
- cablaj pentru metoda clasica care se poate realiza ca in articolul: Cum facem un cablaj
- cablaj pentru "metoda transferului" care se poate realiza ca in articolul: Cum facem un cablaj (II).


       Varianta finala cu acest tip de afisaj este prezentata in filmuletul Bord electronic scuter:



       Pe ecranul cu 4 randuri si 16 coloane se afiseaza:
- pe primul rand, temperatura motorului, in grade Celsius;
- pe al doilea rand, temperatura exteriaora, in grade Celsius;
- pe al treilea rand, tensiunea bateriei, in volti;
- pe a patrulea rand, turatia motorului, in rotatii pe minut (senzor inductiv... spire infasurate pe cablul care vine de la CDI la bobina de inductie);


       Schema de principiu a variantei 2 (cu afisare pe ecran de Nokia 3310) este:

bord electronic vers.2 Dan Gelep - cu afisaj de Nokia 3310

       O varianta de montaj poate fi:
bord electronic vers.2 Dan Gelep - cu afisaj de Nokia 3310 bord electronic vers.2 Dan Gelep - cu afisaj de Nokia 3310

     Pentru a realiza cablajul, va pun la dispozitie cele 2 variante rezultate:
- cablaj pentru metoda clasica care se poate realiza ca in articolul: Cum facem un cablaj
- cablaj pentru "metoda transferului" care se poate realiza ca in articolul: Cum facem un cablaj (II).


       Varianta a doua este prezentata in filmuletul Bord Electronic versiunea 2:

       Pe ecran se afiseaza:
- numele
- pe al doilea rand, temperatura motorului, in grade Celsius;
- pe al treilea rand, temperatura exteriaora, in grade Celsius;
- pe al patrulea rand, tensiunea bateriei, in volti;
- pe a cincilea rand, turatia motorului, in rotatii pe minut (senzor inductiv... spire infasurate pe cablul care vine de la CDI la bobina de inductie);
- pe a saselea rand, viteza, in km/ora (senzor Hall TLE4905);

       Mai jos sunt postate codurile sursa pentru cele 2 tipuri de montaje. Mediul de programare este Bascom.

       Varianta cu display alfanumeric
' ***************************************************************************
' *
' * Title : Computer de bord
' * Version : 1.0
' * Last Updated : 10.03.2009
' * Target : AT Mega8
' * Author : dangelep@yahoo.com
' * Program code : BASCOM AVR
' * Hardware req. : Temp sensor-LM35, Hall sensor-TLE4905
' * Description : Programul citeste temperatura de la senzorii LM35, turatia se face prin citirea impulsurilor date de
' senzorul Hall TLE4905. Senzorul se poate monta la furca rotii din fata in apropierea unui magnet montat pe roata
' ( acelasi principiu ca si vitezometrele de la bicicleta). Turatia se va citi prin inductie ceva veni de la un cablu
' infasurat 3-6 spire in jurul cablului care vine de la CDI la bobina de inductie.
' ***************************************************************************

$regfile "m8def.dat"
$crystal = 12000000 'trebuie cristal de 12Mhz

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Lcd = 16 * 4 'configure lcd screen

Dim W As Word , Batt As Long , Batt_1 As Long , Batt_d1 As Word , Batt_d2 As Word , Batt_d As Word , Volt As Word , Volt_d As Byte , Cols As Byte , Cols_d As Byte
Dim Tur As Word , Raport As Word , Viteza As Long , Viteza1 As Word , Viteza2 As Long , Circumferinta As Word

Circumferinta = 2000 ' Circumferinta rotii

'*** afisarea unui logo care va aparea de fiecare data la pornirea scuterului si timpi motorului selectati din jumperul TIMPI
Cls
Cursor Off
Lcd " -= LOGO =- "
Locate 2 , 1
Lcd " KYMCO DINK 50 "


Waitms 1000
Config Pind.7 = Input
Config Pind.6 = Input

If Pind.7 = 0 Then
Locate 3 , 3
Lcd "Motor 4 timpi"
Raport = 2
Waitms 1000
End If

If Pind.6 = 0 Then
Locate 3 , 3
Lcd "Motor 2 timpi"
Raport = 1
Waitms 1000
End If

'*** terminarea afisarii logoului


'*** Configurarea intreruperilor interne si setarea lor ca Timeri/ Pornirea convertorului analog-digital
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Stop Counter1
Config Timer0 = Counter , Edge = Falling , Prescale = 8
Stop Counter0
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC
Start Adc
'*** Terminare configurare

Cls
Do
'*** Calcularea temperaturii Temp1
W = Getadc(0)
Volt = W * 5
Volt_d = Volt Mod 10
Volt = Volt / 10
Locate 1 , 1
Lcd "Temp:" ; Volt ; "," ; Volt_d
'*** Terminare calcul Temp1

Waitms 100

'*** Calcularea temperaturii Temp2
W = Getadc(1)
Volt = W * 5
Volt_d = Volt Mod 10
Volt = Volt / 10
Lcd "/" ; Volt ; "," ; Volt_d
'*** Terminare calcul Temp2

Waitms 100

'***Calcularea tensiunii de la baterie.
Batt = Getadc(2)
Batt = Batt * 100
Batt_1 = Batt / 545
Batt_d1 = Batt_1 \ 10
Batt_d2 = Batt_d1 * 10
Batt_d = Batt_1 - Batt_d2
Batt_d = Batt_d
Locate 2 , 1
Lcd "Baterie: " ; Batt_d1 ; "," ; Batt_d ; " V "
'***Terminare calcul baterie.

Waitms 150

'***Calcularea turatiei
Counter1 = 0
Start Counter1
Waitms 500
Stop Counter1
Tur = Counter1 * 80
Tur = Tur * Raport
Locate 3 , 1
Lcd "Turatie: " ; Tur ; "RPM "
'***Terminarea calcului turatiei

'*** Calcului vitezei
Counter0 = 0
Start Counter0
Waitms 2000
Stop Counter0
Viteza1 = Counter0 * 10
Viteza2 = Viteza1 * Circumferinta
Viteza = Viteza2 / 8331
Locate 4 , 1
Lcd "Viteza:" ; Viteza ; " Km/h "
'***Terminare calcul viteza

Waitms 5

Loop
End

       Varianta cu display de NOKIA3310 ( controller pcd8544)
' ***************************************************************************
' *
' * Title : Computer de bord
' * Version : 1.0
' * Last Updated : 10.03.2009
' * Target : AT Mega8
' * Author : dangelep@yahoo.com
' * Program code : BASCOM AVR
' * Hardware req. : Temp sensor-LM35, Hall sensor-TLE4905
' * Description : Programul citeste temperatura de la senzorii LM35, turatia se face prin citirea impulsurilor date de
' senzorul Hall TLE4905. Senzorul se poate monta la furca rotii din fata in apropierea unui magnet montat pe roata
' ( acelasi principiu ca si vitezometrele de la bicicleta). Turatia se va citi prin inductie ceva veni de la un cablu
' infasurat 3-6 spire in jurul cablului care vine de la CDI la bobina de inductie.
' ***************************************************************************


$regfile "m8def.dat"
$crystal = 12000000 'trebuie cristal de 12Mhz

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Lcd = 16 * 4 'configure lcd screen

Dim W As Word , Batt As Long , Batt_1 As Long , Batt_d1 As Word , Batt_d2 As Word , Batt_d As Word , Volt As Word , Volt_d As Byte , Cols As Byte , Cols_d As Byte
Dim Tur As Word , Raport As Word , Viteza As Long , Viteza1 As Word , Viteza2 As Long , Circumferinta As Word

Circumferinta = 2000 ' Circumferinta rotii

'*** afisarea unui logo care va aparea de fiecare data la pornirea scuterului si timpi motorului selectati din jumperul TIMPI
Cls
Cursor Off
Lcd " -= LOGO =- "
Locate 2 , 1
Lcd " KYMCO DINK 50 "



Waitms 1000
Config Pind.7 = Input
Config Pind.6 = Input

If Pind.7 = 0 Then
Locate 3 , 3
Lcd "Motor 4 timpi"
Raport = 2
Waitms 1000
End If

If Pind.6 = 0 Then
Locate 3 , 3
Lcd "Motor 2 timpi"
Raport = 1
Waitms 1000
End If

'*** terminarea afisarii logoului


'*** Configurarea intreruperilor interne si setarea lor ca Timeri/ Pornirea convertorului analog-digital
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Stop Counter1
Config Timer0 = Counter , Edge = Falling , Prescale = 8
Stop Counter0
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC
Start Adc
'*** Terminare configurare

Cls
Do
'*** Calcularea temperaturii Temp1
W = Getadc(0)
Volt = W * 5
Volt_d = Volt Mod 10
Volt = Volt / 10
Locate 1 , 1
Lcd "Temp:" ; Volt ; "," ; Volt_d
'*** Terminare calcul Temp1

Waitms 100

'*** Calcularea temperaturii Temp2
W = Getadc(1)
Volt = W * 5
Volt_d = Volt Mod 10
Volt = Volt / 10
Lcd "/" ; Volt ; "," ; Volt_d
'*** Terminare calcul Temp2

Waitms 100

'***Calcularea tensiunii de la baterie.
Batt = Getadc(2)
Batt = Batt * 100
Batt_1 = Batt / 545
Batt_d1 = Batt_1 \ 10
Batt_d2 = Batt_d1 * 10
Batt_d = Batt_1 - Batt_d2
Batt_d = Batt_d
Locate 2 , 1
Lcd "Baterie: " ; Batt_d1 ; "," ; Batt_d ; " V "
'***Terminare calcul baterie.

Waitms 150

'***Calcularea turatiei
Counter1 = 0
Start Counter1
Waitms 500
Stop Counter1
Tur = Counter1 * 80
Tur = Tur * Raport
Locate 3 , 1
Lcd "Turatie: " ; Tur ; "RPM "
'***Terminarea calcului turatiei

'*** Calcului vitezei
Counter0 = 0
Start Counter0
Waitms 2000
Stop Counter0
Viteza1 = Counter0 * 10
Viteza2 = Viteza1 * Circumferinta
Viteza = Viteza2 / 8331
Locate 4 , 1
Lcd "Viteza:" ; Viteza ; " Km/h "
'***Terminare calcul viteza

Waitms 5

Loop
End


'************************************ RUTINE SI TABELE DE DATE *********************
'subrutina de sterge a display-ului
Sub Clslcd
For Pas = 1 To 504
Data_send &H00
Next
End Sub



'subrutina de initializare a display-ului
Sub Initializare
Data_send &H21
Data_send &H90
Data_send &H20
Data_send &HC
Data_send &H80
End Sub



' subrutina de trimitere de date
Sub Data_send
Spiout Valoare , 1
End Sub



'*** Pozitia textului in display.
Sub Position(byval X_pos As Byte , Byval Y_pos As Byte)
Dc = 0
'comutarea display-ului in modul de comanda
Y_pos = Y_pos Xor &H40
'Y_pos = poate lua valori intre 0-5
Spiout Y_pos , 1
'X_pos = poate lua valori intre 0-83
X_pos = X_pos * &H06
X_pos = X_pos Xor &H80
Spiout X_pos , 1
'comutarea display-ului in modul de date
Dc = 1
End Sub


'tabelul cu literele folosite.

Sub Words()
Lenght = Len(text)
For Loops = 1 To Lenght
If Loops = 1 Then
Sign = Left(text , 1)
Elseif Loops = Lenght Then
Sign = Right(text , 1)
Else
Sign = Mid(text , Loops , 1)
End If
If Sign = "/" Then Restore Slash:
If Sign = "," Then Restore Comma:
If Sign = " " Then Restore Spcs:
If Sign = "0" Then Restore 0:
If Sign = "1" Then Restore 1:
If Sign = "2" Then Restore 2:
If Sign = "3" Then Restore 3:
If Sign = "4" Then Restore 4:
If Sign = "5" Then Restore 5:
If Sign = "6" Then Restore 6:
If Sign = "7" Then Restore 7:
If Sign = "8" Then Restore 8:
If Sign = "9" Then Restore 9:
If Sign = "A" Then Restore A:
If Sign = "B" Then Restore B:
If Sign = "C" Then Restore C:
If Sign = "D" Then Restore D:
If Sign = "E" Then Restore E:
If Sign = "F" Then Restore F:
If Sign = "G" Then Restore G:
If Sign = "H" Then Restore H:
If Sign = "I" Then Restore I:
If Sign = "J" Then Restore J:
If Sign = "K" Then Restore K:
If Sign = "L" Then Restore L:
If Sign = "M" Then Restore M:
If Sign = "N" Then Restore N:
If Sign = "O" Then Restore O:
If Sign = "P" Then Restore P:
If Sign = "Q" Then Restore Q:
If Sign = "R" Then Restore R:
If Sign = "S" Then Restore S:
If Sign = "T" Then Restore T:
If Sign = "U" Then Restore U:
If Sign = "V" Then Restore V:
If Sign = "W" Then Restore W:
If Sign = "X" Then Restore X:
If Sign = "Y" Then Restore Y:
If Sign = "Z" Then Restore Z:

For Count = 1 To 6
Read B1
Data_send B1
Next

Next Loops
End Sub


'***********************tabelul de date***********************

Spcs:
Data &H0 , &H0 , &H0 , &H0 , &H0 , &H0 ' spatiu
Comma:
Data &H00 , &H00 , &H50 , &H30 , &H00 ' virgula
Slash:
Data &H20 , &H10 , &H08 , &H04 , &H02 ' slash

0:
Data &H0 , &H3E , &H41 , &H41 , &H41 , &H3E
1:
Data &H0 , &H0 , &H41 , &H7F , &H40 , &H0
2:
Data &H0 , &H42 , &H61 , &H51 , &H49 , &H46
3:
Data &H0 , &H22 , &H41 , &H49 , &H49 , &H36
4:
Data &H0 , &H18 , &H14 , &H52 , &H7F , &H50
5:
Data &H0 , &H4F , &H49 , &H49 , &H49 , &H31
6:
Data &H0 , &H3E , &H49 , &H49 , &H49 , &H32
7:
Data &H0 , &H3 , &H1 , &H71 , &H9 , &H7
8:
Data &H0 , &H36 , &H49 , &H49 , &H49 , &H36
9:
Data &H0 , &H26 , &H49 , &H49 , &H49 , &H3E
A:
Data &H0 , &H78 , &H16 , &H11 , &H16 , &H78
B:
Data &H0 , &H7F , &H49 , &H49 , &H49 , &H36
C:
Data &H0 , &H3E , &H41 , &H41 , &H41 , &H22
D:
Data &H0 , &H7F , &H41 , &H41 , &H41 , &H3E
E:
Data &H0 , &H7F , &H49 , &H49 , &H49 , &H41
F:
Data &H0 , &H7F , &H9 , &H9 , &H9 , &H1
G:
Data &H0 , &H3E , &H41 , &H41 , &H49 , &H3A
H:
Data &H0 , &H7F , &H8 , &H8 , &H8 , &H7F
I:
Data &H0 , &H0 , &H41 , &H7F , &H41 , &H0
J:
Data &H0 , &H30 , &H40 , &H40 , &H40 , &H3F
K:
Data &H0 , &H7F , &H8 , &H14 , &H22 , &H41
L:
Data &H0 , &H7F , &H40 , &H40 , &H40 , &H40
M:
Data &H0 , &H7F , &H2 , &HC , &H2 , &H7F
N:
Data &H0 , &H7F , &H6 , &H8 , &H30 , &H7F
O:
Data &H0 , &H3E , &H41 , &H41 , &H41 , &H3E
P:
Data &H0 , &H7F , &H9 , &H9 , &H9 , &H6
Q:
Data &H0 , &H3E , &H41 , &H51 , &H21 , &H5E
R:
Data &H0 , &H7F , &H9 , &H19 , &H29 , &H46
S:
Data &H0 , &H26 , &H49 , &H49 , &H49 , &H32
T:
Data &H0 , &H1 , &H1 , &H7F , &H1 , &H1
U:
Data &H0 , &H3F , &H40 , &H40 , &H40 , &H3F
V:
Data &H0 , &HF , &H30 , &H40 , &H30 , &HF
W:
Data &H0 , &H3F , &H40 , &H38 , &H40 , &H3F
X:
Data &H0 , &H63 , &H14 , &H8 , &H14 , &H63
Y:
Data &H0 , &H7 , &H8 , &H70 , &H8 , &H7
Z:
Data &H0 , &H61 , &H51 , &H49 , &H45 , &H43


       Aceste variante, cu putina imaginatie si cunostinte in programare, pot fi foarte frumos adaptate si la masini.
Succes !!!!
       Daniel Gelep

Intoarcere la pagina principala