Acasă / Atelier / Microcontroler / ATMEL / Bord electronic de scuter (motocicleta sau masina) cu ATmega8

Bord electronic de scuter (motocicleta sau 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_dg_ver1_schemabord_electronic_dg_ver1_afisaj

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_dg_ver1_cablaj bord_electronic_dg_ver1_montaj

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_dg_ver2_schema

O varianta de montaj poate fi:

bord_electronic_dg_ver2_cablaj bord_electronic_dg_ver2_montaj

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

Articolul original poate fi gasit aici: http://www.niqro.3x.ro/bord/bord_electronic_dg.htm

Despre Nicu FLORICA

ELECTRONICA este prima pasiune a mea... am inceput pe la 7 ani cu un radio cu galena, in vacanta de vara, a fost o bucurie enorma sa aud in casti posturi de radio si in loc sa joc fotbal, ascultam la minunea facuta de mine.. Pasiunea asta mi-a fost insuflata de tata, dar mie nu mi-au placut niciodata televizoarele cu lampi, vazand ca se pot testa cu mana, dar nestiind exact unde am primic cateva socuri care m-au cam speriat... Am inceput sa studiez revistele Tehnium, incat pana in 1998 am colectia aproape completa, de multe ori ajungeam intr-un oras si primul loc vizitat era Anticariatul. Am si alte reviste, cat de cat complete: RET, Radio, Electronistul, etc Am construit destule montaje si scheme si marea mea placere e sa imbunatatesc performantele lor.... In revista Tehnium am publicat 2 articole, unul in 1/'95 numit LUMINA DINAMICA si altul in 1/'97 numit INDICATOR TRICOLOR CU LED... BICOLOR. mi-am facut un site numai cu multe scheme: http://www.tehnic.go.ro si activez pe http://www.elforum.ro, unde am ID-ul niq_ro (acest ID il folosesc in toate forumurile si site-urile).

2 Comentarii

  1. sa nu apara confuzii… tot materialul este al lui Daniel Gelep, eu doar l-am postat initial pe tehnic.go.ro

  2. Salut!
    Interesant proiect, cred ca am sa il adaptez la un atv.
    Inainte sa ma apuc de el v-as intreba ce valoare au R6 si R4.
    Multumesc!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*