Skocz do zawartości

Wyświetlacz Biegów Oparty Na Mikrokontrolerze Do Wodniaka


Gość Pawelo96
 Share

Rekomendowane odpowiedzi

Witam. Z racji tego iż w wodniakach nie można przerobić czujnika luzu tak samo łatwo jak w olejaku wpadłem na pomysł wykorzystania napięcia jakie czujnik wysyła do ECU.

Chciałbym wykorzystać do tego mikrokontroler Attiny2313 i program napisany w języku Bascom.

Z tematu Daniela o Tre wiemy, że:

1 bieg - 1,80V

2 bieg - 2,27V

3 bieg - 3,01V

4 bieg - 3,67V

5 bieg - 4,37V

6 bieg - 4,70V

N (luz) - 5,01V

Znalazłem najprostszy schemat i program, który zapala i gasi diodę dwoma przyciskami.

Ja potrzebował bym pomocy, ponieważ chciałbym ten program przerobić tak, żeby 2 przycisk kompletnie wywalić, a w miejsce pierwszego podać napięcie z czujnika i w programie napisać, że jeśli na pinb 0 pojawi się napięcie 1,80V to zapali się pierwsza dioda podpięta pod portd 0. Jeśli na pinb 0 pojawi się napięcie 2,27V to zapali się druga dioda podpięta pod pind 1 itd. itd.

Problem w tym, że nie potrafię przerobić tego programu i dlatego zwracam się do was o pomoc. Całą elektrykę, wykonanie i podpięcie pod moto ogarnę.

Wrzucam ten program napisany w Bascom:

 


$regfile = "attiny2313.dat"                 'najpierw określamy typ proca
$crystal = 1000000                          'definiujemy z jakim taktowaniem będzie pracował


config portb=input                          'port b  jako wejścia
       portb=&B00000000                     'wszędzie stan spoczynkowy-0
config portd=output                         'pprt d jako wyjścia
       portd=&B0000000                      'wszędzie stan spoczynkowy-0


 do                                         'pętla nieskończona

   if pinb.0=1 then                         'jeżeli przycisk 1 wciśnięty
   portd.0=1                                'zapal diode
   elseif pinb.1=1 then                     'jeżeli przycisk 2 wciśnięty
   portd.0=0                                'zgaś diodę
   endif                                    'koniec bloku warunkowego

 loop                                       'koniec pętli
 
end                                         'koniec programu
    Oraz schemat: http://www.forbot.pl/forum/upload_img/obrazki/IMG_4889012f61d0f2487.jpg   Z góry dzięki wszystkim za pomoc :) Każda rada się liczy :D

Odnośnik do komentarza
Udostępnij na innych stronach

jeżeli chodzi o szybką pomoc:

 

tu masz mój program do tego samego ale na inny procek - problem że nie sprawdzony (co do ładu w kodzie sie nie wypowiadam bo programistą nie jestem) - jakoś życie mi się tak poukładało że musiałem chwilowo sobie odpuścić (wrócę do tego projektu jak skończę grzanie manetek - tam już mam działające układy)

1. pisane było pod atmega8 (jakoś lubię ten procek, sporo pamięci - a w smd nie zajmuje dużo miejsca a i cena niespecjalnie wali na kolana - ok 5 zł)

2. nie sprawdziłem go w praktyce - tzn nie wiem czy działa (tak zakładam bo składa się z komponentów innych moich działających programów)

3. trzeba zweryfikować czy funkcjonalność badająca napięcie jest analogiczna (w google wpisz sobie:  bascom attiny2313.dat adc) - podpatrzysz jak to jest zdefiniowane.

'Program obsługi wbudowanego w mikrokontroler
'10-bitowego przetwornika A/C
'bandit - wyświetlacz biegu

$regfile = "m8def.dat"                                      'informuje kompilator o pliku dyrektyw mikrokontrolera
$crystal = 8000000                                          'informuje kompilator o częstotliwości oscylatora taktującego mikrokontroler

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'konfiguracja wewnętrznego przetwornika A/C

'konfiguracja wyjśc wyświetlacza LED
Config Pind.0 = Output                                      'A
Config Pind.1 = Output                                      'B
Config Pind.2 = Output                                      'C
Config Pind.3 = Output                                      'D
Config Pind.4 = Output                                      'E
Config Pind.5 = Output                                      'F
Config Pind.6 = Output                                      'G
Config Pind.7 = Input                                       'Prog

'1 = 1,8 V     (1,7 - 1,9) (348 - 389)
Const Poziom_1_od = 348
Const Poziom_1_do = 389
'2 = 2,3 V     (2,2 - 2,4) (451 - 492)
Const Poziom_2_od = 451
Const Poziom_2_do = 492
'3 = 3,0 V     (2,9 - 3,1) (594 - 635)
Const Poziom_3_od = 594
Const Poziom_3_do = 635
'4 = 3,7 V     (3,6 - 3,8) (738 - 779)
Const Poziom_4_od = 738
Const Poziom_4_do = 779
'5 = 4,4 V     (4,3 - 4,5) (881 - 922)
Const Poziom_5_od = 881
Const Poziom_5_do = 922
'6 = 4,7 V     (4,6 - 4,8) (943 - 984)
Const Poziom_6_od = 943
Const Poziom_6_do = 984
'N = 5,0 V     (4,9 - 5,1) (1004 - 1045)
Const Poziom_0_od = 1004
Const Poziom_0_do = 1045

Seg_a Alias Portd.0
Seg_b Alias Portd.1
Seg_c Alias Portd.2
Seg_d Alias Portd.3
Seg_e Alias Portd.4
Seg_f Alias Portd.5
Seg_g Alias Portd.6
Prog Alias Pind.7
Portd.7 = 1

Dim Wart_ac As Word                                         'zmienna na wartość odczytaną z przetwornika
Dim Poziom_0 As Eram Word                                   'zmienna EEPROM poziom 1
Dim Poziom_1 As Eram Word                                   'zmienna EEPROM poziom 1
Dim Poziom_2 As Eram Word                                   'zmienna EEPROM poziom 2
Dim Poziom_3 As Eram Word                                   'zmienna EEPROM poziom 3
Dim Poziom_4 As Eram Word                                   'zmienna EEPROM poziom 4
Dim Poziom_5 As Eram Word                                   'zmienna EEPROM poziom 5
Dim Poziom_6 As Eram Word                                   'zmienna EEPROM poziom 6
Dim Poziom_od As Word                                       'zmiena do ustalenia zakresu od-do
Dim Poziom_do As Word                                       'zmiena do ustalenia zakresu od-do
Dim I As Byte                                               'zmienna do pętli jasności
Dim Jasnosc As Byte
Start Adc                                                   'uruchamia wbudowany przetwornik

'wyłączenie wyświetlacza
 Seg_a = 0
 Seg_b = 0
 Seg_c = 0
 Seg_d = 0
 Seg_e = 0
 Seg_f = 0
 Seg_g = 0
 Waitms 100

' Prog
 If Prog = 0 Then
  Seg_a = 1
  Seg_d = 1
  Seg_g = 1
  Waitms 500
  Seg_a = 0
  Seg_d = 0
  Seg_g = 0
  Waitms 500

  Seg_a = 1
  Seg_d = 1
  Seg_g = 1
  Waitms 500
  Seg_a = 0
  Seg_d = 0
  Seg_g = 0
  Waitms 500

  Seg_a = 1
  Seg_d = 1
  Seg_g = 1
  Waitms 500
  Seg_a = 0
  Seg_d = 0
  Seg_g = 0

  Do
  Loop Until Prog = 1                                       'pętla czeka na puszczenie przycisku
  Waitms 250

 ' wyświetlenie 0 i oczekiwanie na naciśnięcie przycisku
  Do
   Seg_a = 0
   Seg_b = 0
   Seg_c = 0
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
   Seg_a = 1
   Seg_b = 1
   Seg_c = 1
   Seg_d = 1
   Seg_e = 1
   Seg_f = 1
   Seg_g = 0
    Waitms 200
  Loop Until Prog = 0
   Wait 1
   Wart_ac = Getadc(2)
   Poziom_0 = Wart_ac
   Wait 1
  Do
  Loop Until Prog = 1                              'pętla czeka na puszczenie przycisku

 ' wyświetlenie 1 i oczekiwanie na naciśnięcie przycisku
  Do
   Seg_a = 0
   Seg_b = 0
   Seg_c = 0
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
   Seg_a = 0
   Seg_b = 1
   Seg_c = 1
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
  Loop Until Prog = 0
   Wait 1
   Wart_ac = Getadc(2)
   Poziom_1 = Wart_ac
   Wait 1
  Do
  Loop Until Prog = 1                              'pętla czeka na puszczenie przycisku

 ' wyświetlenie 2 i oczekiwanie na naciśnięcie przycisku
  Do
   Seg_a = 0
   Seg_b = 0
   Seg_c = 0
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
   Seg_a = 1
   Seg_b = 1
   Seg_c = 0
   Seg_d = 1
   Seg_e = 1
   Seg_f = 0
   Seg_g = 1
    Waitms 200
  Loop Until Prog = 0
   Wait 1
   Wart_ac = Getadc(2)
   Poziom_2 = Wart_ac
   Wait 1
  Do
  Loop Until Prog = 1                              'pętla czeka na puszczenie przycisku

 ' wyświetlenie 3 i oczekiwanie na naciśnięcie przycisku
  Do
   Seg_a = 0
   Seg_b = 0
   Seg_c = 0
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
   Seg_a = 1
   Seg_b = 1
   Seg_c = 1
   Seg_d = 1
   Seg_e = 0
   Seg_f = 0
   Seg_g = 1
    Waitms 200
  Loop Until Prog = 0
   Wait 1
   Wart_ac = Getadc(2)
   Poziom_3 = Wart_ac
   Wait 1
  Do
  Loop Until Prog = 1                              'pętla czeka na puszczenie przycisku

 ' wyświetlenie 4 i oczekiwanie na naciśnięcie przycisku
  Do
   Seg_a = 0
   Seg_b = 0
   Seg_c = 0
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
   Seg_a = 0
   Seg_b = 1
   Seg_c = 1
   Seg_d = 0
   Seg_e = 0
   Seg_f = 1
   Seg_g = 1
    Waitms 200
  Loop Until Prog = 0
   Wait 1
   Wart_ac = Getadc(2)
   Poziom_4 = Wart_ac
   Wait 1
  Do
  Loop Until Prog = 1                              'pętla czeka na puszczenie przycisku

 ' wyświetlenie 5 i oczekiwanie na naciśnięcie przycisku
  Do
   Seg_a = 0
   Seg_b = 0
   Seg_c = 0
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
   Seg_a = 1
   Seg_b = 0
   Seg_c = 1
   Seg_d = 1
   Seg_e = 0
   Seg_f = 1
   Seg_g = 1
    Waitms 200
  Loop Until Prog = 0
   Wait 1
   Wart_ac = Getadc(2)
   Poziom_5 = Wart_ac
   Wait 1
  Do
  Loop Until Prog = 1                              'pętla czeka na puszczenie przycisku

 ' wyświetlenie 6 i oczekiwanie na naciśnięcie przycisku
  Do
   Seg_a = 0
   Seg_b = 0
   Seg_c = 0
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
    Waitms 200
   Seg_a = 1
   Seg_b = 0
   Seg_c = 1
   Seg_d = 1
   Seg_e = 1
   Seg_f = 1
   Seg_g = 1
    Waitms 200
  Loop Until Prog = 0
   Wait 1
   Wart_ac = Getadc(2)
   Poziom_5 = Wart_ac
   Wait 1
  Do
  Loop Until Prog = 1                              'pętla czeka na puszczenie przycisku

 End If



'pętla główna
Do                                                          'początek pętli programu

'ustalenie poziomu swiatła
 Wart_ac = Getadc(2)                                        'odczytanie wartości z wejścia ADC2 mikrokontrolera
  Select Case Wart_ac
    Case Is < 100
               Jasnosc = 1
    Case 100 To 200
               Jasnosc = 2
    Case 200 To 300
               Jasnosc = 3
    Case 300 To 400
               Jasnosc = 4
    Case 400 To 500
               Jasnosc = 5
    Case 500 To 600
               Jasnosc = 6
    Case 600 To 700
               Jasnosc = 7
    Case 700 To 800
               Jasnosc = 8
    Case 800 To 900
               Jasnosc = 9
    Case Is > 900
               Jasnosc = 10
  End Select



'ustalenie numeru biegu
 Wart_ac = Getadc(2)                                        'odczytanie wartości z wejścia ADC2 mikrokontrolera

'kasowanie starej wartości wyświetlacza
    Seg_a = 0
    Seg_b = 0
    Seg_c = 0
    Seg_d = 0
    Seg_e = 0
    Seg_f = 0
 Seg_g = 0


For I = 1 To 10                                             'pętla ustalająca jasność wyświetlania
 If I <= Jasnosc then
  Poziom_od = Poziom_1 - 20
  Poziom_do = Poziom_1 + 20
  If Wart_ac > Poziom_od And Wart_ac < Poziom_do Then       'wyświetl 1
   Seg_a = 0
   Seg_b = 1
   Seg_c = 1
   Seg_d = 0
   Seg_e = 0
   Seg_f = 0
   Seg_g = 0
  Else
   Poziom_od = Poziom_2 - 20
   Poziom_do = Poziom_2 + 20
   If Wart_ac > Poziom_od And Wart_ac < Poziom_do Then      'wyświetl 2
    Seg_a = 1
    Seg_b = 1
    Seg_c = 0
    Seg_d = 1
    Seg_e = 1
    Seg_f = 0
    Seg_g = 1
   Else
    Poziom_od = Poziom_3 - 20
    Poziom_do = Poziom_3 + 20
    If Wart_ac > Poziom_od And Wart_ac < Poziom_do Then     'wyświetl 3
     Seg_a = 1
     Seg_b = 1
     Seg_c = 1
     Seg_d = 1
     Seg_e = 0
     Seg_f = 0
     Seg_g = 1
    Else
     Poziom_od = Poziom_4 - 20
     Poziom_do = Poziom_4 + 20
     If Wart_ac > Poziom_od And Wart_ac < Poziom_do Then    'wyświetl 4
      Seg_a = 0
      Seg_b = 1
      Seg_c = 1
      Seg_d = 0
      Seg_e = 0
      Seg_f = 1
      Seg_g = 1
     Else
      Poziom_od = Poziom_5 - 20
      Poziom_do = Poziom_5 + 20
      If Wart_ac > Poziom_od And Wart_ac < Poziom_do Then   'wyświetl 5
       Seg_a = 1
       Seg_b = 0
       Seg_c = 1
       Seg_d = 1
       Seg_e = 0
       Seg_f = 1
       Seg_g = 1
      Else
       Poziom_od = Poziom_6 - 20
       Poziom_do = Poziom_6 + 20
       If Wart_ac > Poziom_od And Wart_ac < Poziom_do Then  'wyświetl 6
        Seg_a = 1
        Seg_b = 0
        Seg_c = 1
        Seg_d = 1
        Seg_e = 1
        Seg_f = 1
        Seg_g = 1
       Else
        Poziom_od = Poziom_0 - 20
        Poziom_do = Poziom_0 + 20
        If Wart_ac > Poziom_od And Wart_ac < Poziom_do Then 'wyświetl 0
         Seg_a = 1
         Seg_b = 1
         Seg_c = 1
         Seg_d = 1
         Seg_e = 1
         Seg_f = 1
         Seg_g = 0
        Else
         Seg_a = 1
         Seg_b = 0
         Seg_c = 0
         Seg_d = 1
         Seg_e = 0
         Seg_f = 0
         Seg_g = 1
        End If
       End If
      End If
     End If
    End If
   End If
  End If
 Else
     Seg_a = 0
  Seg_b = 0
  Seg_c = 0
  Seg_d = 0
  Seg_e = 0
  Seg_f = 0
  Seg_g = 0
 End If

    Waitms 2                                                'opóźnienie 2 ms
Next I

Loop                                                        'koniec pętli Do...Loop
End                                                         'koniec programu
Odnośnik do komentarza
Udostępnij na innych stronach

oo naprawde wielkie dzięki za to :) A masz może schemat pod atmega8 jak to podłączyć według tego programu, bo czytając kod się trochę gubie :D Attiny nie musi być, teraz myśle, że również skorzystam z atmegi8 :)

 

o przed chwilą sprawdziłem i attiny2313 nie posiada ADC, więc przerzucam się na atmege :)

Edytowane przez Pawelo96
Odnośnik do komentarza
Udostępnij na innych stronach

A gotowe oprogramowanie, schematy i co tylko potrzebujesz?

 

U mnie chodzi taki wyswietlacz, jest ale bardziej zlozony bo pasuje do wszystkich modeli.

Odnośnik do komentarza
Udostępnij na innych stronach

oo naprawde wielkie dzięki za to :) A masz może schemat pod atmega8 jak to podłączyć według tego programu, bo czytając kod się trochę gubie :D Attiny nie musi być, teraz myśle, że również skorzystam z atmegi8 :)

 

o przed chwilą sprawdziłem i attiny2313 nie posiada ADC, więc przerzucam się na atmege :)

 

nie mam - bo najpierw piszę program - potem robię projekt płytki i podczepiam pod najbardziej pasujące mi nogi.

Więc program na początku pisania ma tylko domyślne wyprowadzenia - potem jest to zmieniane.

Ten program nie był debugowany - zapewne ma błędy - tym bardziej że wstawiłem w nim opcję automatycznego ściemniania wyświetlacza i autoprogramowanie poziomów napięć (gdyby konkretny egzemplarz miał trochę inne wartości)

Ja używam ATmega8 w obudowie do montażu powierzchniowego - trzeba trochę wprawy z lutowaniem (0,3 mm odstępu między wypracowaniami) - i niestety problem z montażem kończy się w moim przypadku wycięciem procka nożykiem do tapet.

 

Jeżeli chcesz go (program) wykorzystać - to raczej weź sobie pewne fragmenty - a jeżeli chcesz (możesz) poczekać - to zapewne za jakiś czas będzie działający program (sprawdzony na konkretnej płytce) i mozaika ścieżek.

 

Najczęściej - ze względu na miejsce robię płytki dwustronne - ale myślę że nie będzie to problemem.

Edytowane przez syku
Odnośnik do komentarza
Udostępnij na innych stronach

ok dzięki za pomoc, postaram się wykorzystać twój program. Mi potrzebne są jedynie porty pod diody i wejście napięcia z czujnika luzu, więc wyświetlacza nie będę używał.

Odnośnik do komentarza
Udostępnij na innych stronach

w programie masz sterowanie każdym segmentem oddzielnie. musisz sprawdzić czy parametry do adc są identyczne z atmega8

jak się w czymś gubisz - daj znać - to poniżej powinno pomóc analizować bloki programu

'1 = 1,8 V     (1,7 - 1,9) (348 - 389)  - ustalam że bieg 1 jest od wartości adc = 348 do  389
' i ustawiam te wartości jako domyślne wersji niezaprogramowanej
Const Poziom_1_od = 348
Const Poziom_1_do = 389
'2 = 2,3 V     (2,2 - 2,4) (451 - 492)  itd
(...)

'poniżej konfiguruję gdzie jest podpięty poszczególny segment wyświetlacza
Seg_a Alias Portd.0
Seg_b Alias Portd.1
Seg_c Alias Portd.2
Seg_d Alias Portd.3
Seg_e Alias Portd.4
Seg_f Alias Portd.5
Seg_g Alias Portd.6

' tu ustalam pod który pin podłączam przycisk do programowania
' zakładałem że poziomy napięć będzie można ustalać sobie samemu
'poprzez wbicie biegu i naciśnięcie przycisku programowania
Prog Alias Pind.7
Portd.7 = 1


' poniżej definiuję zmienne które są mi potrzebne
Dim Wart_ac As Word                                         'zmienna na wartość odczytaną z przetwornika
Dim Poziom_0 As Eram Word                                   'zmienna EEPROM poziom 1
Dim Poziom_1 As Eram Word                                   'zmienna EEPROM poziom 1
Dim Poziom_2 As Eram Word                                   'zmienna EEPROM poziom 2
Dim Poziom_3 As Eram Word                                   'zmienna EEPROM poziom 3
Dim Poziom_4 As Eram Word                                   'zmienna EEPROM poziom 4
Dim Poziom_5 As Eram Word                                   'zmienna EEPROM poziom 5
Dim Poziom_6 As Eram Word                                   'zmienna EEPROM poziom 6
Dim Poziom_od As Word                                       'zmiena do ustalenia zakresu od-do
Dim Poziom_do As Word                                       'zmiena do ustalenia zakresu od-do
Dim I As Byte                                               'zmienna do pętli jasności
Dim Jasnosc As Byte
Start Adc                                                   'uruchamia wbudowany przetwornik

'wyłączenie wyświetlacza
(...)

' Prog - w tym kawałku sprawdzam czy jest naciśnięty jest na starcie przycisk programowania
'sygnalizuję to wyświetleniem poziomych segmentów potem
' wyświetlam po koleji biegi i proszę o naciśnięcie przycisku
'po naciśnięciu odczytuję wartość napięcia które przypisane jest do danego biegu
' i zapamiętuję w zmiennych pamięci EEPROM
(...)
' czyli po koleji
 ' wyświetlenie 0 i oczekiwanie na naciśnięcie przycisku
(...)
 ' wyświetlenie 1 i oczekiwanie na naciśnięcie przycisku
 (... itd ...)



'pętla główna
Do                                                          'początek pętli programu

'ustalenie poziomu swiatła
' to miało ustalić wartość napięcia na układzie fototranzytora i na podstawie wartości napięcia
' ustalić poziom jasności wyświetlanych cyfr
' tu widzę baga że odczytuję wartość z tego samego pinu co wartość napięcia z biegów - czyli error nr 1
(...)



'ustalenie numeru biegu
' właściwy pomiar napięcia i w dalszej części będzie jego wyświetlenie
 Wart_ac = Getadc(2)                                        'odczytanie wartości z wejścia ADC2 mikrokontrolera

'kasowanie starej wartości wyświetlacza
(...)

For I = 1 To 10                                             'pętla ustalająca jasność wyświetlania
' tu jest pętla która ma 10 przebiegów
' im większa ma być jasność tym przez większą ilość przebiegów (z tych 10) wyświetlam cyfrę na wyświetlaczu (w pozostałych przebiegach wygaszam wyświetlacz)
' wartość biegu uzależniona jest od zaprogramowanego progu +/- 20 jednostek  
 If I <= Jasnosc then
(...)

    Waitms 2                                                'opóźnienie 2 ms
Next I

Loop                                                        'koniec pętli Do...Loop
End                                                         'koniec programu
Edytowane przez syku
Odnośnik do komentarza
Udostępnij na innych stronach

 

w programie masz sterowanie każdym segmentem oddzielnie. musisz sprawdzić czy parametry do adc są identyczne z atmega8

jak się w czymś gubisz - daj znać - to poniżej powinno pomóc analizować bloki programu

 

wykorzystałem twój program i narazie usunąłem ustalanie jasności. Analizując dalej kod, rozumiem że jest on napisany pod wyświetlacz ze wspólną katodą? Jeśli tak to będę musiał zamienić cyfry 1 na zero itd.

Odnośnik do komentarza
Udostępnij na innych stronach

pod wspólną anodę. ale dobrze rozumujesz. podpiecie tylu segmentów na raz pod procka może go uwalić . jest limit pradowy który może przyjąć cały port. dlatego pomiędzy procek a wyświetlacz wstawiam układ sterujący uln2803. i włączenie robię logiczną jedynką.

Edytowane przez syku
Odnośnik do komentarza
Udostępnij na innych stronach

ok wkrótce będę się zabierał za pierwsze testy dlatego zrobiłem sobie małą instrukcje przy podłączeniu do moto:

1. na vcc i avcc podajemy 5V

2 pod adc2 wpinam się czujnikiem biegów i oczywiście mase czujnika do masy atmegi

3 włączam zapłon na wbitym luzie

4 wyświetlają się trzy poziome kreski na wyświetlaczu i gdy wcisnę prog to wyświetla się 0 i puszczam prog

5 wbijam 1 bieg i wciskam przycisk, wyświetla się 1 na wyświetlaczu i puszczam przycisk

5 wbijam 2 bieg i wciskam przycisk, wyświetla się 2 na wyświetlaczu i puszczam przycisk

6 itd z każdym biegiem

7 po tym zabiegu założyłem że wyłączę zapłon i wyświetlacz, odczekam chwile i znów na wbitym luzie włączam zapłon i wyświetlacz

8 tutaj atmega jest już zaprogramowana i odrazu powinno się wyświetlić zero

9 gdy wbijam 1 to wyświetla się 1 itd itd.

Myślę, że instrukcje napisałem w poprawnej kolejności, jeśli nie to prosze o poprawki.

Pozdrawiam.

 

o zapomniałem, oczywiście przycisk prog daje pod vcc :)

Edytowane przez Pawelo96
Odnośnik do komentarza
Udostępnij na innych stronach

nie dałeś ani schematu ani kodu ani nie napisałeś czego oczekujesz. ja zwyczajowo przyciski zwieram do masy bo wykorzystuje wewnętrzne podciagniecie pod jedynkę.

Odnośnik do komentarza
Udostępnij na innych stronach

nie dałeś ani schematu ani kodu ani nie napisałeś czego oczekujesz. ja zwyczajowo przyciski zwieram do masy bo wykorzystuje wewnętrzne podciagniecie pod jedynkę.

w pełni wykorzystałem twój kod tylko wyrzuciłem jasność wyświetlacza. Chodzi mi o to czy po przeanalizowaniu kodu dobrze rozumuje pierwsze podłączenie do moto. Cały układ mam na stykowej.

Czy po przeanalizowaniu kodu dobrze wykonam procedure programowania postępując tak jak opisałem to wyżej?

Odnośnik do komentarza
Udostępnij na innych stronach

Config Pind.7 = Input                                       'Prog
Portd.7 = 1                                                   - to podciąga "wiszący" port pod "1" logiczną - dlatego naciśnięcie przycisku to podanie sygnału "0" - czyli zwarcie portu do masy

Na starcie sprawdzam czy jest zwarty do masy (naciśnięty) przycisk programowania (trzeba więc go trzymać wciśnięty podczas włączania zasilania)
Jeżetli tak jest to trzy razy mrugam poziomymi segmentami
Potem czekam na puszczenie przycisku programowania
Wyświetlam 0 i oczekuję na naciśnięcie przycisku programowania. W momencie naciśnięcia zapamiętuję poziom napięcia dla biegu "0"
Czekam na puszczenie przycisku programowania.
Wyświetlam 1 i oczekuję na naciśnięcie przycisku programowania. W momencie naciśnięcia zapamiętuję poziom napięcia dla biegu "1"
Czekam na puszczenie przycisku programowania.
Wyświetlam 2 i oczekuję na naciśnięcie przycisku programowania. W momencie naciśnięcia zapamiętuję poziom napięcia dla biegu "2"
Czekam na puszczenie przycisku programowania.
Wyświetlam 3 i oczekuję na naciśnięcie przycisku programowania. W momencie naciśnięcia zapamiętuję poziom napięcia dla biegu "3"
Czekam na puszczenie przycisku programowania.
Wyświetlam 4 i oczekuję na naciśnięcie przycisku programowania. W momencie naciśnięcia zapamiętuję poziom napięcia dla biegu "4"
Czekam na puszczenie przycisku programowania.
Wyświetlam 5 i oczekuję na naciśnięcie przycisku programowania. W momencie naciśnięcia zapamiętuję poziom napięcia dla biegu "5"
Czekam na puszczenie przycisku programowania.
Wyświetlam 6 i oczekuję na naciśnięcie przycisku programowania. W momencie naciśnięcia zapamiętuję poziom napięcia dla biegu "6"
(pomiędzy wyświetlaniem poszczególnych biegów jest 1 s przerwy - na spokojne puszczenie przycisku programowania)
 

Odnośnik do komentarza
Udostępnij na innych stronach

o dziękuje bardzo, o takie coś mi chodziło. Wszystko mam narazie na płytce stykowej. Jak przejdzie testy to przeniose to na uniwersalną.

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Config Pind.7 = Input                                       'Prog

Portd.7 = 1                                                   - to podciąga "wiszący" port pod "1" logiczną - dlatego naciśnięcie przycisku to podanie sygnału "0" - czyli zwarcie portu do masy

Na starcie sprawdzam czy jest zwarty do masy (naciśnięty) przycisk programowania (trzeba więc go trzymać wciśnięty podczas włączania zasilania)

Jeżetli tak jest to trzy razy mrugam poziomymi segmentami

Potem czekam na puszczenie przycisku programowania

 

a gdy już podłączymy pierwszy raz pod moto i zaprogramujemy procesor to przycisk programowania wyrzucić z układu?

W pętli głównej do ustalenia numeru biegu nie jest on potrzebny.

Odnośnik do komentarza
Udostępnij na innych stronach

Wyrzuć - przycisk jest potrzebny tylko do zaprogramowania potem jest zbędny - wystarczy kawałek druta na czas programowania

na marginesie - ja nie testowałbym na moto - powód (do sprawdzenia potrzebujesz dodatkowego zasilacza aby sprawdzić poziomy napięć) - trudno poprawiać program i latać do moto

ja bym sprawdził na moto czy mam takie jak trzeba napięcia (zgodne z rozpiską), potem zrobiłbym dzielniki napięcia lub na potencjometrze symulowałbym napięcia wskazane w rozpisce.

 

a dopiero jak to by mi działało to szedł bym do motocykla.

jedną rzecz sprawdź - napięcie zasilania procka (nominalnie ma być 5V) ale poziom napięcia na luzie to 5,01V - niby niewiele ale jednak więcej niż zasilanie - nie wiem jak zachowa się ADC bo napięcie odniesienia nie powinno być niższe od napięcia mierzonego. Osobiście zrobiłbym zasilanie procka na napięciu 5,1V.

 

Ale to jest TWÓJ TRON - jak mawiała reklama IKEA

Odnośnik do komentarza
Udostępnij na innych stronach

heh dzięki za wszystkie podpowiedzi, ale dzisiaj jak testowałem ten wyświetlacz to się załamałem :( Napięcia na poszczególnych biegach (w moim, czyli 650N) są inne niż w 1250. Najwyższa wartość to chyba 1.6V na luzie. Jutro sprawdze wszystkie biegi, ale napewno na biegach od 1 do 6 oprócz luzu, napięcie jest niższe niż 1.5V :( Znowu muszę kombinować i wprowadzić poprawki do kodu :( Szkoda, że od początku nie pomierzyłem tych napięć, myślałem że jest tak samo jak w 1250.

Edytowane przez Pawelo96
Odnośnik do komentarza
Udostępnij na innych stronach

cos chyba zle mierzyles,moja 650 ma 1-1,36    2-1,77    3-2,49     4-3,23     5-4,10    6-4,55     a luz 5,0 v   sprawdz jeszcze raz!   i pamietaj ze te napiecia lekko sie wachaja.

Odnośnik do komentarza
Udostępnij na innych stronach

a poza tym nie rozumiem Twojego Pawelo problemu

1. program podczas programowania zapamiętuje wartość napięcia z każdego biegu

2. przy weryfikacji napięcia - bierze każdy zapamiętany poziom dodaje do niego wartość 20 i odejmuje wartość 20 czym ma pewne widełki na zmianę napięcia (20 to około 0,1 V)

3. zawsze możesz zmienić wartość widełek np wartość 10 to około 0,05V

Odnośnik do komentarza
Udostępnij na innych stronach

tez tak mierzylem   rozowy i minus  z  aku .   pozdro

Odnośnik do komentarza
Udostępnij na innych stronach

Masz racje tyle że po zaprogramowaniu (dzisiaj podłączyłem do moto) po włączeniu palą się cały czas trzy kreski. Nie ważne czy zmieniam bieg czy nie. Zrobiłem wszystko tak jak mi napisałeś. Może gdzieś popełniłem błąd. Spróbuje jeszcze raz.

Odnośnik do komentarza
Udostępnij na innych stronach

Przenieśmy sprawy elektroniczna na PW - szkoda zaśmiecać forum

wyślij mi kod który w końcu wymodliłeś - taki jaki jest

zrób schemat - może być odręcznie zeskanowany (lub zdjęcie tego schematu) - może być też opis (ale każdego wyprowadzenia)

postaram się pomóc - nie wiem jak Twoje programowanie mikrokontrolerów - ale ja mam zasadę:

blokuję sobie kawałęk kodu funkcją stop i sprawdzam jak zachowuje się do danego momentu.

przykład w moim programie - pierwszy stop po wejściu w "programowanie" - ale przed stopem wyświetlenie np. znaku "-" na środkowym segmencie i już wiesz czy działa przycisk.

 

inna forma sprawdzenia to wyświetlanie - robię nowy kawałek kodu (pętla od 0 do 6) i wyświetlasz numer - a potem sprawdzasz czy samo wyświetlenie poszczególnych wartości działa.

 

Myślę że można powrócić do dyskusji na forum - ale może jeżeli będzie to wnosiło coś dla ekipy motocyklowej - na nasze dyskusje dobra będzie elektoda.pl a nie polishbanditcrew.pl

 

Chętnie Ci pomogę - o ile będę potrafił - ale nie zrobię układu za Ciebie - bo chodzi o to abyś się czegoś przy okazji nauczył - satysfakcja większa od wniesionego trudu

Jak coś wal na PW lub sysio10@wp.pl

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

 Share

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając ze strony akceptujesz regulamin oraz politykę prywatności.Regulamin Polityka prywatnościUmieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.