[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » форумы » Общие вопросы по Bascom-AVR » Мерцание "градусника" и числовых значений на LCD rc2004c (LCD RC2004C + Atmega 16A)
Мерцание "градусника" и числовых значений на LCD rc2004c
US5MUWДата: Вторник, 21.01.2014, 17:48 | Сообщение # 1
Группа: Пользователи
Сообщений: 5

Статус: Offline
Добрый день !
Недавно собрал первую конструкцию на Атмеге 16 - КСВ метр,
который использует 4 порта АЦП для опроса напряжений на внешних датчиках
и вывода цифровых значений и "градусника" - бегающего столбика.

Все бы ничего, все считает вот только при выводе на дисплей мерцает "градусник" и цифры....
если убираю задержку в программе - дисплей вообще с ума сходит... подскажите
как убрать мерцание и получилось вроде этого


 
US5MUWДата: Вторник, 21.01.2014, 17:50 | Сообщение # 2
Группа: Пользователи
Сообщений: 5

Статус: Offline
вот исходник для двух АЦП и дисплея 20 на 4, им я руководствовался

$regfile = "m8def.dat"
$crystal = 12000000

Config Portb = Output
Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Config Portc.0 = Input
Config Portc.1 = Input
Config Portc.5 = Output
Enable Interrupts
Enable Int1
On Int1 Pow
Config Int1 = Falling

Dim A As Integer
Dim B As Integer
Dim C As Single
Dim D As Single
Dim I As Single
Dim W As Single
Dim G As Single
Dim H As Single
Dim J As Single
Dim U As Byte
Dim K As Byte
Dim L As Byte
Dim R As Byte
Dim N As Single
Dim L1 As Integer
Dim R1 As Integer

Deflcdchar 1 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24

Deflcdchar 2 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27

Cursor Off
Cursor Noblink
Cls
Locate 1 , 2
Lcd "ҐЅгёєaїop KCB"
Locate 2 , 3
Lcd "ё MoжЅocїё"
Wait 1
Cls
Locate 1 , 5
Lcd "«іaЅoі"
Locate 2 , 5
Lcd "UA3RQN"
Wait 1
Cls
'-----------------------------------------
'-----------------------------------------
I = 50
K = 200
U = 1
Do

M1:

Start Adc
A = Getadc(0)
B = Getadc(1)
Stop Adc
C = A + B
D = A - B
W = C / D
H = A ^ 2
H = H / I
G = B ^ 2
G = B / I
J = H - G
J = J / K

If W < 1 Then W = 1

If B > A Then Goto Da

If W > 10 Then Goto Kcv

'---------------------------------
'---------------------------------

L1 = J * N

  If 0 < L1 And L1 < 0 Then
      L = 0
      End If

   If 0 <= L1 And L1 < 64 Then
      L = 1
      End If

   If 64 <= L1 And L1 < 128 Then
      L = 2
      End If

   If 128 <= L1 And L1 < 192 Then
      L = 3
      End If

   If 192 <= L1 And L1 < 256 Then
      L = 4
      End If

   If 256 <= L1 And L1 < 320 Then
      L = 5
      End If

   If 320 <= L1 And L1 < 384 Then
      L = 6
      End If

   If 384 <= L1 And L1 < 448 Then
      L = 7
      End If

   If 448 <= L1 And L1 < 512 Then
      L = 8
      End If

   If 512 <= L1 And L1 < 576 Then
      L = 9
      End If

   If 576 <= L1 And L1 < 640 Then
      L = 10
      End If

   If 640 <= L1 And L1 < 704 Then
      L = 11
      End If

   If 704 <= L1 And L1 < 768 Then
      L = 12
      End If

   If 768 <= L1 And L1 < 832 Then
      L = 13
      End If

   If 832 <= L1 And L1 < 896 Then
      L = 14
      End If

    If 896 <= L1 And L1 < 960 Then
      L = 15

      End If

    If 960 <= L1 And L1 < 1023 Then
       L = 16

     End If

 R1 = W * 102

   If 0 < R1 And R1 < 0 Then
      R = 0
      End If

   If 0 <= R1 And R1 < 64 Then
      R = 1
      End If

   If 64 <= R1 And R1 < 128 Then
      R = 2
      End If

   If 128 <= R1 And R1 < 192 Then
      R = 3
      End If

   If 192 <= R1 And R1 < 256 Then
      R = 4
      End If

   If 256 <= R1 And R1 < 320 Then
      R = 5
      End If

   If 320 <= R1 And R1 < 384 Then
      R = 6
      End If

   If 384 <= R1 And R1 < 448 Then
      R = 7
      End If

   If 448 <= R1 And R1 < 512 Then
      R = 8
      End If

   If 512 <= R1 And R1 < 576 Then
      R = 9
      End If

   If 576 <= R1 And R1 < 640 Then
      R = 10
      End If

   If 640 <= R1 And R1 < 704 Then
      R = 11
      End If

   If 704 <= R1 And R1 < 768 Then
      L = 12
      End If

   If 768 <= R1 And R1 < 832 Then
      R = 13
      End If

   If 832 <= R1 And R1 < 896 Then
      R = 14
      End If

   If 896 <= R1 And R1 < 960 Then
      R = 15
      End If

   If 960 <= R1 And R1 < 1023 Then
      R = 16
      End If

Cls

Select Case L

   Case 0 : Lcd "Moж:" ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 1 : Lcd "Moж:" ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 2 : Lcd "Moж:" ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 3 : Lcd "Moж:" ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 4 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 5 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 6 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 7 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 8 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 9 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 10 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 11 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3)
   Case 12 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3)
   Case 13 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3)
   Case 14 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3)
   Case 15 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1)
   Case 16 : Lcd "Moж:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2)

End Select

Lowerline

Select Case R

   Case 0 : Lcd "KCB:" ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 1 : Lcd "KCB:" ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 2 : Lcd "KCB:" ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 3 : Lcd "KCB:" ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 4 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 5 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 6 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 7 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 8 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 9 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 10 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3)
   Case 11 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3) ; Chr(3)
   Case 12 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3) ; Chr(3)
   Case 13 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1) ; Chr(3)
   Case 14 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(3)
   Case 15 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(1)
   Case 16 : Lcd "KCB:" ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2) ; Chr(2)

End Select

Locate 2 , 13
Lcd Fusing(w , "#.#")
Locate 1 , 13
Lcd Fusing(j , "###.#")

Waitms 700

Goto M1
Loop

Da:
Cls
Locate 1 , 4
Lcd "ЁpoіepДїe"
Locate 2 , 5
Lcd "аaїАёє"
Sound Portc.5 , 800 , 1000
Wait 2
Cls
Goto M1

Kcv:
Cls
Locate 1 , 4
Lcd "Ёpeгe»ДЅoe"
Locate 2 , 7
Lcd "KCB"
Sound Portc.5 , 800 , 1000
Wait 2
Goto M1

Pow:
Incr U
If U > 3 Then U = 1
Select Case U
  Case 1 : K = 200
   : N = 10.2
  Case 2 : K = 100
   : N = 5.1
  Case 3 : K = 10
       : N = 0.52
  End Select
Gifr = 64
Return


 
exersizzeДата: Вторник, 21.01.2014, 18:08 | Сообщение # 3
Группа: Администраторы
Сообщений: 723

Статус: Offline
есть возможность снять того что происходит на экране? так сложно определить по исходнику

 
AlekSДата: Вторник, 21.01.2014, 21:26 | Сообщение # 4
Группа: Проверенные
Сообщений: 247

Статус: Offline
Цитата exersizze ()
есть возможность снять того что происходит на экране?
Чтоб определить в какой момент, есть мнение, что  Cls" оф   много. Думаю лучше будет Lcd "        " -  забить пробелами.
Пример:
Locate 1 , 4
Lcd "          "  ' здесь 8 забоев = Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)

Select Case L

Case 0 : Lcd "Moж:" ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
Case 1 : Lcd "Moж:" ; Chr(1) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)
Case 2 : Lcd "Moж:" ; Chr(2) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3) ; Chr(3)

Возможно оно.  73!!




Сообщение отредактировал AlekS - Вторник, 21.01.2014, 21:29
 
US5MUWДата: Вторник, 21.01.2014, 21:40 | Сообщение # 5
Группа: Пользователи
Сообщений: 5

Статус: Offline
присмотритесь...

 
US5MUWДата: Вторник, 21.01.2014, 22:00 | Сообщение # 6
Группа: Пользователи
Сообщений: 5

Статус: Offline
сейчас выложу видео

 
US5MUWДата: Вторник, 21.01.2014, 22:40 | Сообщение # 7
Группа: Пользователи
Сообщений: 5

Статус: Offline
http://www.youtube.com/watch?v=Cgf6ZBXpj-Q&feature=youtu.be

 
Форум » форумы » Общие вопросы по Bascom-AVR » Мерцание "градусника" и числовых значений на LCD rc2004c (LCD RC2004C + Atmega 16A)
  • Страница 1 из 1
  • 1
Поиск: