Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вопрос инициализации pic16f676 (Как правильно прописать инициализацию)
Вопрос инициализации pic16f676
shustovas Дата: Пн, 21.02.2011, 13:36  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 19.02.2011

Статус: Offline

Ув. форумчане! Помогите с настройкой битов конфигурации в 16F676. Три дня не могу правильно настроить!!! В чем моя ошибка? Только не говорите что в моём DNK))))
Что именно требуется:
1) порт AN0 или AN1 - это аналоговый вход АЦП (какой именно не важно)
2) порт RC0, RC1, RC2, RA3, RA5 - цифровые входы
3) порт RC3, RC4, RC5 - цифровые выходы
в принципе в протеусе всё это понятно видно (архив прикрепил с исходником и проектом в протеусе)
ЗАРАНЕЕ БЛАГОДАРЕН ВАМ!

...

и так спустя еще 5 часов клцанья всяких вариантов с ADCON0, ADCON1, ANSEL и даже с VRCON
решил "упростить" задачу) А именно сделать следующее элементарное творение:
кнопочки вешаем на RC0, RC1, RC2
лампочки вешаем на RC3, RC4, RC5
ну и собственно очередная головоломка - при подачи единички на порт RC0, чтоб на порту RC3 тоже была единичка... порты RC1-RC4 и RC2-RC5 соответственно...

Code

a      var byte
b      var byte
c      var byte

'ADCON0 = ?
ADCON1 = 0
TRISA   = 0
TRISC  = %00000111
ANSEL  = 7    
'VRCON  = ???

a      = PORTC.0
b      = PORTC.1
c      = PORTC.2

main:
       if a = 1  then
           PORTC.3 = 0
       else
           PORTC.3 = 1
       endif

       if b = 1  then
           PORTC.4 = 0
       else
           PORTC.4 = 1
       endif
          
       if c = 1  then
           PORTC.5 = 0
       else
           PORTC.5 = 1
       endif
goto main

может есть мысли какие??? я уже морально не выдерживаю)))) если честно)))) wacko

Прикрепления: nastroyka.rar(14Kb)


RUST
Сообщение отредактировал shustovas - Пн, 21.02.2011, 20:31
ЯНДЕКС Дата: 21.02.2011
ivan_fd Дата: Пн, 21.02.2011, 21:41  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну хотя бы вот так:

Code
symbol a      = PORTC.0
symbol b      = PORTC.1
symbol c      = PORTC.2

и

Code
    if c = 1  then
         PORTC.5 = 0
     else
         PORTC.5 = 1
     endif


Меня все время преследуют умные мысли...но я быстрее!!!
shustovas Дата: Пн, 21.02.2011, 22:32  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 19.02.2011

Статус: Offline

даже так не помогает!!!
Code
main:    
        if PORTC.0 = 1  then    
            PORTC.3 = 0    
        else    
            PORTC.3 = 1    
        endif    

        if PORTC.1 = 1  then    
            PORTC.4 = 0    
        else    
            PORTC.4 = 1    
        endif    
            
        if PORTC.2 = 1  then    
            PORTC.5 = 0    
        else    
            PORTC.5 = 1    
        endif    
goto main

вся проблема в битах конфигурации, а именно в ADCON0, ADCON1, ANSEL и т.д. Именно в этих настройках я прошу помощи.

ХМ........ странно, а вот так работает!!! Тоесть не работает порт С одновременно как вход-выход.... а почему?

Code
TRISA  = %00000011
TRISC  = %11111111   
ANSEL  = 7    
main:   
       if PORTC.0 = 1  then   
           PORTA.5 = 0   
       else   
           PORTA.5 = 1   
       endif   
goto main


RUST
Сообщение отредактировал shustovas - Пн, 21.02.2011, 22:58
ivan_fd Дата: Пн, 21.02.2011, 23:30  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

как это не помогает,
Quote (shustovas)
ну и собственно очередная головоломка - при подачи единички на порт RC0, чтоб на порту RC3 тоже была единичка... порты RC1-RC4 и RC2-RC5 соответственно...

Это как раз работает.

Вот код.

Code

'a      var byte
'b      var byte
'c      var byte

ADCON1 = %00000010
ADCON0 = %11000000
TRISA  = %00110011
TRISC  = %00000111
ANSEL  = %00000011

symbol a      = PORTC.0
symbol b      = PORTC.1
symbol c      = PORTC.2

main:
       if a = 1  then
           PORTC.3 = 0
       else
           PORTC.3 = 1
       endif

       if b = 1  then
           PORTC.4 = 0
       else
           PORTC.4 = 1
       endif
          
       if c = 1  then
           PORTC.5 = 0
       else
           PORTC.5 = 1
       endif
goto main


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Пн, 21.02.2011, 23:41
ADMIN Дата: Вт, 22.02.2011, 02:58  |                                                                                                                Сообщение # 5
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Вот некоторые изменения в схеме. Подтяжка на PORTC должна быть, иначе будут плясать как попало
Прикрепления: 5923337.rar(30Kb)
shustovas Дата: Вт, 22.02.2011, 08:32  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 19.02.2011

Статус: Offline

Для ivan_fd, а дейстривельно работает! Сейчас работает даже так:
Code
TRISA  = %00110011   
TRISC  = %00000111   
ANSEL  = %00000011   
main:   
         if PORTC.0 = 1  then   
             PORTC.3 = 0   
         else   
             PORTC.3 = 1   
         endif   
goto main

но есть вопросы:
1) в чем моя ошибка была? Где именно собака зарыта?
2) по поводу ADCON1 = %00000010
почему именно так? ADCON1 можно смело ставить 0! Вывод делаю относительно этого:
bit 7: Unimplemented: Read as ‘0’.

bit 6-4: ADCS<2:0>: A/D Conversion Clock Select bits
000 =FOSC/2
001 =FOSC/8
010 =FOSC/32
x11 =FRC (clock derived from a dedicated internal oscillator = 500 kHz max)
100 =FOSC/4
101 =FOSC/16
110 =FOSC/64

bit 3-0: Unimplemented: Read as ‘0’.

3) ну и собственно почему ADCON0 = %11000000 ????
ведь:
bit 7 ADFM: A/D Result Formed Select bit
1 = Right justified
0 = Left justified

bit 6 VCFG: Voltage Reference bit
1 = VREF pin
0 = VDD

интересует именно bit 6, почему не 0???


RUST
Сообщение отредактировал shustovas - Вт, 22.02.2011, 08:35
ivan_fd Дата: Вт, 22.02.2011, 11:15  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (shustovas)
1) в чем моя ошибка была? Где именно собака зарыта?

Вы не правильно определили порты. (SYMBOL a)
Возьмите два файла, тот который Вы выкладывали, и исправленный и сравните.

Quote (shustovas)
2) по поводу ADCON1 = %00000010
почему именно так? ADCON1 можно смело ставить 0! Вывод делаю относительно этого:

Я не знаю почему у Вас было именно так, это ведь Ваш файл. К настройкам АЦП я не смотрел.

Quote (shustovas)

3) ну и собственно почему ADCON0 = %11000000 ????
ведь:

И это тоже не я писал.

Вы напишите что Вам нужно сделать с АЦП?


Меня все время преследуют умные мысли...но я быстрее!!!
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вопрос инициализации pic16f676 (Как правильно прописать инициализацию)
Страница 1 из 11
Поиск: