Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Не работает AN0 AN2 AN3 в контролере pic16f876a
Не работает AN0 AN2 AN3 в контролере pic16f876a
Ethno Дата: Вт, 12.11.2013, 16:11  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 93
Репутация: 0   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

История такая подвум первым каналам измеряется напряжение батареи и выходное напряжение на AN2 датчик температуры. в Протеусе все работает нормально. Но в железе не работает AN2  датчик рабочий проверял LM35.
Что может быть?
Вот код.
Device =16F876A
Xtal=10
Declare Adin_Res = 10
Declare adin_tag = FRC
Declare  Adin_Stime = 50

Declare LCD_Type ALPHA
Declare LCD_DTPin PORTB.4
Declare LCD_ENPin PORTB.3
Declare LCD_RSPin PORTB.2
Declare LCD_Interface 4
Declare LCD_CommandUs 2000
Declare LCD_DataUs 50
Declare LCD_Lines 2

TRISA = %00000111
ADCON0 =%11000101
ADCON1 = %10000000

Dim var1 As Word
Dim var2 As Word
Dim var3 As Word

Dim Bar_Val As Byte
Dim Bars As Byte
Dim Bars1 As Byte
Dim Balance As Byte
Dim Balf As Byte

Symbol B_Wdth = 12
Symbol MaxBar = B_Wdth * 3
Symbol FullBar = 3
Symbol BaseBar = 0
Symbol CGRAM = 64

Symbol PIN = PORTC.1

Print At 1, 1, "TEST"

Sound PIN, [50,60,70,20,85,120,83,40,70,20,50,20,70,20,90,120,90,20,98,160]
DelayMS 1000
Cls

Again:
ADCIN 0, var1
DelayUS 20
ADCIN 1, var2
DelayUS 20
ADCIN 2, var3
DelayUS 20

var3 = var3 /2.0
If var3 > 24 Then var3 = var3 - 1
If var2 /63.95 <= 10.4 Then Sound PIN,  [75, 10]

Print At 1, 1, $9B
Print At 1,7,  "10mA"
Print At 1, 12, $ED
Print At 2,13,  Dec1 var1 /103.33
Print At 1,2,  Dec1 var2 /63.95
Print At 1, 13, Dec2 var3, $99 , "C", $12
Print $FE,CGRAM,Rep $0\8,$0,Rep $10\6,$0,$0,Rep $14\6,$0,$0,Rep $15\6
GoTo Over_Bargraph

BarGraph:

Declare Warnings = Off
Declare Byte_Math = On

If  Bar_Val < MaxBar Then
Bars1 = Bar_Val
Else Bars1 = MaxBar
EndIf
Bars = Bars1 /3
Balance = Bars1 //3

If  Balance < 1 Then
Balf = Balance
Else Balf = 1
EndIf

Print At 2,1,Rep FullBar\Bars,Rep (Balance + BaseBar)\Balf,Rep " " \B_Wdth - (Bars + Balf)
Return
Declare Byte_Math = Off
Declare Warnings = On

Over_Bargraph:
Bar_Val = var1/26
GoSub BarGraph
GoTo Again

Сообщение отредактировал Ethno - Вт, 12.11.2013, 16:13
ЯНДЕКС Дата: 12.11.2013
shaman Дата: Вт, 12.11.2013, 16:43  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 179
Репутация: 5   ±
Замечания:   ±
На сайте с 07.11.2011

Статус: Offline

День добрый , сразу что бросилось в глаза это вот кусок кода
Again:
ADCIN 0 ?????
ADCIN 1 ?????
ADCIN 2 ?????
Это команда ADCIN на PicBasicPro в Proton это команда ADIn
Ethno Дата: Вт, 12.11.2013, 16:51  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 93
Репутация: 0   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

Я уже делал
var1 = ADIn 0
var2 = ADIn 1
var3 = ADIn 2 
все равно не работает в железе канал var3 = ADIn 2
anatol Дата: Вт, 12.11.2013, 18:17  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

вы в документацию заглядываете

Цитата
bit 5-3 CHS2:CHS0: Analog Channel Select bits
000 = Channel 0 (AN0)
001 = Channel 1 (AN1)
010 = Channel 2 (AN2)
011 = Channel 3 (AN3)
100 = Channel 4 (AN4)
101 = Channel 5 (AN5)
110 = Channel 6 (AN6)
111 = Channel 7 (AN7)

или с шашкой наголо. здесь есть на родной мове.
http://www.microchip.ru/lit/?mid=1x0
и выбрав один файл http://www.microchip.ru/files/d-sheets-rus/pic16_23.pdf
на станице 4 рисунок 23-1 видим что каналы опрашиваются по очереди и почитав над рисунком
поймем что неправильно будет если указать ADCON0 = %11000101 один раз. Т.е. мы на измерение выбираем нулевой канал, а считать информацию пытаемся по всем каналам. Чтобы заработали другие каналы необходимо задать
ADCON0 = %11000101или ADCON0 = %11001101 или ADCON0 = %11010101 перед началом нужного измерения по нужному каналу и еще дать время на измерение и перобразование.
Протеус - симулятор и модель или упрощенная или недоработанная.
Ethno Дата: Вт, 12.11.2013, 18:29  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 93
Репутация: 0   ±
Замечания:   ±
На сайте с 11.12.2012

Статус: Offline

Это должно примерно выглядеть так?

    ADCON0 = %11000101
    var1 = ADIn 0
    DelayUS 20
    ADCON0 = %11001101
    var2 = ADIn 1
    DelayUS 20
    ADCON0 = %11010101
    var3 = ADIn 2
    DelayUS 20
dimitriy-bc Дата: Вт, 12.11.2013, 20:46  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Ethno, здравствуйте.

ADCON0 =%11000101 отдельно прописывать не надо.

Часть его функций Вы задали в начале программы
Declare Adin_Res = 10
Declare adin_tag = FRC         ;ADCON0 =%11хххххх
Declare  Adin_Stime = 50

Оставшаяся часть управляется командой ADIn
var1 = ADIn 0          ;ADCON0 =%хх000ххх
var2 = ADIn 1          ;ADCON0 =%хх001ххх
var3 = ADIn 2          ;ADCON0 =%хх010ххх

И еще, выходное сопротивление источника напряжения не должно превышать 10К. Ну и можно увеличить значение Declare  Adin_Stime = 50.

Сообщение отредактировал dimitriy-bc - Вт, 12.11.2013, 23:47
anatol Дата: Ср, 13.11.2013, 01:36  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

dimitriy-bc, а разница писать команды в строчку или столбиком есть? wink
dimitriy-bc Дата: Ср, 13.11.2013, 08:49  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

anatol, я конечно дико извеняюсь!!! Вы про что? wacko
anatol Дата: Ср, 13.11.2013, 10:10  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Про это

Код
[b]var1 = ADIn 0          [b];ADCON0 =%хх[b]000ххх

Код
var1 = ADIn 0  
     ...................
      ADCON0 = %11001101
dimitriy-bc Дата: Ср, 13.11.2013, 18:33  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

anatol, давайте сначала определимся, очки есть wink или их нет. В первом варианте перед ;ADCON0 стоит точка с запятой. Т.е. комментарий. Во втором точка с запятой отсутствуют. Значит призывает протон к конкретным действиям.
Сообщение отредактировал dimitriy-bc - Ср, 13.11.2013, 20:13
anatol Дата: Ср, 13.11.2013, 21:04  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Ой! wacko cry biggrin

Очки есть - зрения нет...

Сообщение отредактировал anatol - Ср, 13.11.2013, 21:05
dimitriy-bc Дата: Ср, 13.11.2013, 22:33  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Я тоже заметил, что с годами руки все короче и короче...  biggrin
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Не работает AN0 AN2 AN3 в контролере pic16f876a
Страница 1 из 11
Поиск: