Bonjour à tous!Je n’ai rien écrit depuis longtemps, maintenant c’est plus une source d’information que pratique. Je vais essayer de régler la situation. Je vais vous parler du développement du compteur de vitesse HUD. Bien qu'il ne s'agisse pas d'une projection laser , il est abordable et compact.Présentation, 3.3" . , . 4 , 5, . , — . , . , , ( ) — 1800. ( ):
1. — , , , - . , — . .
2. Vous ne pouvez pas coller le film, puis les nombres (ils sont assez petits) doublent, et rien n'est visible au soleil.Pour commencer, le résultat n'est pas un film n'importe où dans le verre et même pendant la journée:
sous la coupe, je promets beaucoup d'images, de vidéos médiocres, de code et de texte - le tout dans la meilleure tradition.ThéorieL'idée est simple - pour une période de temps fixe, nous comptons le nombre d'impulsions du capteur de vitesse. En tant que CPU, l'ATMega8 simple et abordable.La première difficulté s'est avérée être la coordination du MK 5 V et des indicateurs 7,5 V. Fantasy a dessiné un schéma d'un empilement de transistors et résistances (7 éléments pour indication dynamique). De tous Google, un seul article m'a aidé à remplacer les indicateurs dans une montre, désolé d'avoir perdu son adresse. J'en profite pour exprimer ma gratitude à l'auteur pour l'idée d'utiliser TD62783 (à partir de 5 pièces par lot). En fait, il s'agit d'un pilote d'indicateur à sept segments, à l'intérieur d'un assemblage de transistor.Ensuite, un convertisseur DC / DC. Fabriqué sur le MC34063, j'en ai beaucoup, je les ai en stock. Je l'ai compté sur une calculatrice, je l'ai vérifié avec un testeur - 7,5 V. Dans les tests sur le terrain, il s'est avéré être un peu, la luminosité n'était pas suffisante, augmentée à 10 V.La luminosité est ajustée en fonction des lectures du capteur de lumière, qui est une photorésistance chinoise ordinaire.En conséquence, le circuit s'est avéré comme suit:
Entraînement J'aiimprimé la carte de circuit imprimé TopoR . J'ai utilisé le placement automatique, bien que j'ai corrigé la plupart des éléments manuellement. Mais le progrès doit fonctionner pour moi, et pas seulement pour le progrès. Il s'est avéré la beauté:
avec la largeur du corps, U4 a raté, j'ai dû terminer les pistes et ne pas souder la 11e étape.À quoi cela ressemble dans la vraie vie:

La prochaine personne inattendue s'est glissée dans le logiciel (je ne dirai pas comment j'ai oublié de mettre en miroir 2 et 5, 4 - il n'y a pas de quoi être fier). Le problème était plus compliqué: le compteur comptait trop longtemps le nombre d'impulsions nécessaire. Par exemple, à 60 km / h, compter 60 impulsions provenant d'un capteur de vitesse a pris plus d'une seconde. Une mise à jour aussi rare du témoignage ne me convenait pas.J'ai dû multiplier chaque étage de mesure par 2.Un changement linéaire de luminosité par rapport à l'éclairage ne convenait pas: quand il était légèrement plus sombre, la luminosité s'est avérée insuffisante, quand il était presque sombre, la luminosité était trop. J'ai lancé Excel, construit un graphique pour différentes fonctions mathématiques. En conséquence, j'ai choisi un carré.
Code Bascom:Texte masqué'HUD-speedometer
'17/01/2016
'21/01/2016
'v1.1
$regfile = "m8adef.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Portb = Output
Config Portc = Output
Config Portd = Output
Config Portd.4 = Input
Portd.4 = 1
Config Timer0 = Counter , Edge = Falling
Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 8
Config Timer2 = Timer , Prescale = 1024
On Timer2 Mytimer2
Enable Interrupts
Enable Timer2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim I As Byte '
Dim N As Byte '
Dim Pwm_value As Integer '
Dim Speed As Integer , Speed_half As Integer , First_symbol As Integer , Second_symbol As Integer
Dim A As Integer ' Speed Speed_half
Dim R1 As Word
Declare Sub Digit_indication(digit As Integer) '
Const P = 500
Const T = 5000 '
Const T1 = 1000 ' PWM
Pwm_value = 5
Tcnt0 = 0 '
Do
Incr I
If I = 25 Then '
R1 = Getadc(7)
R1 = Sqr(r1) '
R1 = R1 * 8
If R1 < 250 Then
Pwm_value = 250 - R1
Else
Pwm_value = 3 '
End If
I = 0
End If
Gosub Indication
Loop
Indication:
If Speed < 3 Then ' 0 - , 3 -
Pwm_value = 0
End If
While Speed > 99 '.. 2
Speed = Speed - 100
Wend
First_symbol = Speed / 10 '
Second_symbol = First_symbol * 10 '
Second_symbol = Speed - Second_symbol '
Pwm1b = 0
Pwm1a = 0
Waitus T1 '
Call Digit_indication(first_symbol) '
Pwm1b = Pwm_value
Waitus T
Pwm1b = 0
Pwm1a = 0
Waitus T1 '
Call Digit_indication(second_symbol)
Pwm1a = Pwm_value
Waitus T
Return
Sub Digit_indication(digit As Integer)
Select Case Digit
Case 0:
Portd.0 = 0
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Case 1:
Portd.0 = 0
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
Portc.4 = 0
Portc.5 = 1
Case 2:
Portd.0 = 1
Portc.0 = 0
Portc.1 = 1
Portc.2 = 1
Portc.3 = 0
Portc.4 = 1
Portc.5 = 1
Case 3:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 0
Portc.3 = 0
Portc.4 = 1
Portc.5 = 1
Case 4:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 1
Portc.4 = 0
Portc.5 = 1
Case 5:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Portc.4 = 1
Portc.5 = 0
Case 6:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 0
Case 7:
Portd.0 = 0
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
Portc.4 = 1
Portc.5 = 1
Case 8:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Case 9:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
End Select
End Sub
Mytimer2:
Incr N
If N = 26 Then
N = 0
Speed = Tcnt0 'Speed =
Tcnt0 = 0 '
End If
If N = 13 Then '.. ( )
Speed_half = Tcnt0 * 2 '
A = Speed - Speed_half
A = A And &B0111111111111111 '
If A > 2 Then
Speed = Speed_half
End If
End If
Timer2 = 135 ' 135
Return
À la fin de 135 - un facteur de correction, sélectionné pour chaque machine individuellement (135 pour Logan, pour Solaris c'était moins - tout le monde a des capteurs de vitesse différents).La vidéo promise. Désolé pour la qualité, j'ai tiré sur un morceau de ruban électrique bleu d'une main, de l'autre j'ai roulé:Les indicateurs ne s'allument pas lorsque la vitesse est inférieure à 3 km / h. Si la vitesse est supérieure à 99, s'affiche alors sans le premier caractère.Budget:ATMega8 - 200 rub pour 5 pcs -40 rub Indicators - 825 rub pour 10 pcs - 165rub TD62783 - 250 rub pour 5 pcs -50 rub Le reste des trucs en vrac que j'avais, mais en général, il est clair que vous pouvez rester dans les 500 rub.Il n'y a plus rien à dire. Il s'est avéré un grand beau comptoir. Testé sur Solaris. La mise au point a échoué, la mise au point n'avait pas de capteur de vitesse. Je terminerai le programme de travail avec OBD2 via ELM327.Dossier de projet sur Yandex.DiskMerci à tous pour votre attention!