Програмирование pic на СИ.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Програмирование pic на СИ.
подумаешь, бином ньютона -
что там догадываться... или компараторы не отключил или на rmw нарвался - всего и вариантов 2 штуки. если порты на цифру не перевел - на вход вроде должно работать.
что там догадываться... или компараторы не отключил или на rmw нарвался - всего и вариантов 2 штуки. если порты на цифру не перевел - на вход вроде должно работать.
-
Chettuser
Re: Програмирование pic на СИ.
Кстати, а светодиод случаем не в "цифре" стоит? Есть там такой глюк.
Re: Програмирование pic на СИ.
Про внутреннюю подтяжку.
Скажите а в PIC можно подтянуть внутренний резистор на отдельный пин или если подтягивается резисторы то сразу на всем порту?
По команде я понял что это сразу про весь порт речь, а вот отдельно по пинам нельзя делать подтяжку?
Скажите а в PIC можно подтянуть внутренний резистор на отдельный пин или если подтягивается резисторы то сразу на всем порту?
По команде
Код: Выделить всё
RBPU = 1; // подтягивающие R (0-вкл, 1-выкл)Re: Програмирование pic на СИ.
В данном случае - да, весь порт... в отдельности не получится... а так... ПИКи ведь тоже разные бывают...
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Програмирование pic на СИ.
Решил снова написать в ожидании помощь, а не очередных насмешек. На днях решил дальше поковырять пик раз мне никто толком не помог. а всего лишь посмеялись. Взял всё тот же PIC16F887, чтобы пока не заморачиваться с модулями и аналог или цифра вход решил использовать пины на порту D, та RD0...RD4 без дополнительных модулей то есть работают как есть. К RD0 подключил кнопку, к RD3 подключил диод. Если всё правильно понял, то RD0 настраиваю на вход, а RD3 на выход. Смысл всей задумки, как уже писал, раз нажимаем горит, ещё раз тухнет. Возможно напарил с кодом.
Код может где-то неверен, но так ничего нет. Если написать так:
то диод горит и при нажатии тухнет, отпускаю кнопку горит. Дальше разберусь как сделать что бы менял состояние по нажатию. Про не пойму с управлением пинами. То есть кнопка работает только когда стоит пин на выход, а не вход. Объясните, плиз, без наездов как правильно ставить работу пинов.
Код: Выделить всё
void main () {
TRISD = 0b00000001;
PORTD =0;
while (1) {
if (RD0=1)
RD3=RD0;
else
RD3=0;
}
}Код может где-то неверен, но так ничего нет. Если написать так:
Код: Выделить всё
void main () {
TRISD = 0b00000000;
PORTD =0;
while (1) {
if (RD0=1)
RD3=RD0;
else
RD3=0;
}
}то диод горит и при нажатии тухнет, отпускаю кнопку горит. Дальше разберусь как сделать что бы менял состояние по нажатию. Про не пойму с управлением пинами. То есть кнопка работает только когда стоит пин на выход, а не вход. Объясните, плиз, без наездов как правильно ставить работу пинов.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Програмирование pic на СИ.
if(RD0=1) операция не присваивания, а сравнения, если так хотите , то if(RD0==1)
-
Chettuser
Re: Програмирование pic на СИ.
А подтяжка есть на кнопке? Это первое.
Далее.
Переключение можно написать так:
RD3 = ~RD3;
это означает "инвертировать состояние вывода порта", по условию разумеется, где Вы и написали.
Возможно придётся включить некоторую задержку - Вы же мгновенно не сможете нажать и отпустить кнопку? С таймерами Вам работать еще рановато, как и с прерываниями. Задержка скажем в 0,5 сек.
Картинки со схемой подключения на сайте я так, к сожалению и не увидел.
Далее.
Переключение можно написать так:
RD3 = ~RD3;
это означает "инвертировать состояние вывода порта", по условию разумеется, где Вы и написали.
Возможно придётся включить некоторую задержку - Вы же мгновенно не сможете нажать и отпустить кнопку? С таймерами Вам работать еще рановато, как и с прерываниями. Задержка скажем в 0,5 сек.
Картинки со схемой подключения на сайте я так, к сожалению и не увидел.
Re: Програмирование pic на СИ.
В строке if(RD0=1) имел введу сравнение с тем, если есть на порту сигнал, диод включаем/выключаем.
RD3 = ~RD3; про это думал потом попробовать
Подтяжка имели введу RBPU = 1; то есть подтягивать к единице?
По поводу картинок, их нет т.к. нахожусь на работе.
Есть ещё вопрос по компараторам, что это и как работает т.к. в даташите нашел только в одном месте и то в описании режима SLEEP. На этой строке "CMCON = 0x07; // отключение компараторов" компилятор материться.
RD3 = ~RD3; про это думал потом попробовать
Подтяжка имели введу RBPU = 1; то есть подтягивать к единице?
По поводу картинок, их нет т.к. нахожусь на работе.
Есть ещё вопрос по компараторам, что это и как работает т.к. в даташите нашел только в одном месте и то в описании режима SLEEP. На этой строке "CMCON = 0x07; // отключение компараторов" компилятор материться.
-
Chettuser
Re: Програмирование pic на СИ.
А нафига Вам компаратор?
Его настраивать надо по даташиту, ищите соответствующий раздел, если честно я никогда его не применял.
Его настраивать надо по даташиту, ищите соответствующий раздел, если честно я никогда его не применял.
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Нормально работало, а теперь при коде
Не меняется значение порта Б, Если написать RB4( К примеру)=1; то будет меняться.
Код: Выделить всё
void podgot (void)
{
CMCON = 0x07; // отключение компараторов.
TRISA = 0b00000000; // направление работы ножек порта А.
TRISB = 0b00000001; // направление работы ножек порта В.
RBPU = 1;
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б.
}
////////////////////////////////////////////////////
void main (void)
{
podgot ();
while (1)
{
PORTB=1;
led1=0;
}
}
Не меняется значение порта Б, Если написать RB4( К примеру)=1; то будет меняться.
-
Chettuser
Re: Програмирование pic на СИ.
Подскажите где в MCC18 прячется функция Delay10KTCYx?
-
Chettuser
Re: Програмирование pic на СИ.
misterkuk писал(а):Нормально работало, а теперь при коде
Не меняется значение порта Б, Если написать RB4( К примеру)=1; то будет меняться.
TRISB = 0b00000001; - RB0 - на вход, остальные на выход.
PORTB=1; - здесь в порт запишется следующим образом: 0b00000001. т.е. туда где настроено на вход.
А led1 на какой у Вас записан?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
mcc18\src\extended\delaysChettuser писал(а):Подскажите где в MCC18 прячется функция Delay10KTCYx?
-
Chettuser
Re: Програмирование pic на СИ.
Хех! Да они на асме сделаны! Чудеса!
А я то думал на Сях...
Спасибо, Alex!
Спасибо, Alex!
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Chettuser писал(а):misterkuk писал(а):Нормально работало, а теперь при коде
Не меняется значение порта Б, Если написать RB4( К примеру)=1; то будет меняться.
TRISB = 0b00000001; - RB0 - на вход, остальные на выход.
PORTB=1; - здесь в порт запишется следующим образом: 0b00000001. т.е. туда где настроено на вход.
А led1 на какой у Вас записан?
led1 посажен на RA линию.
Суть RB0 у меня настроен на вход и через него я считаю приходящие импульсы. Остальные биты работают на выход и подключены к 7ми сегментному индикатору с ОК. led1 это первый разряд индикатора. Просто по мойму всё работало и код был уже написан и работал, но я его кода-то подевал или затёр случайно. Каждый бит напряжёно определять тогда будет
-
Chettuser
Re: Програмирование pic на СИ.
PORTB=1; - пишет в RB0 единицу.
А RB0 у Вас на вход оформлен.
А RB0 у Вас на вход оформлен.
Re: Програмирование pic на СИ.
Добрый вечер! Написал маленькую програмку для pic12f629, кроме Си ничего не знаю. Компилирую в Pic C Compiler. Честно сказать, программа далека от совершенства, но за то работает (правда нестабильно). Поэтому хотелось бы увидеть ваши комментарии и исправления)
Код: Выделить всё
#include <main.h>
void main()
{
while(1)
{
if(!input(PIN_A5))
while(input(PIN_A5))
{
output_high(PIN_A1);
delay_ms(100);
output_low(PIN_A1);
delay_ms(100);
}
}
}-
Chettuser
Re: Програмирование pic на СИ.
Хотелось бы раз и навсегда заполнить пробел в самообучении:
Есть конструкция типа
есть даташит, в нём приведено например следующее: (глава REGISTER 24-1: CONFIG1L: CONFIGURATION REGISTER 1 LOW)
Так всё же что писать в #pragma config ?
и где это брать?
Есть конструкция типа
Код: Выделить всё
#pragma config CPUDIV =
#pragma config CPUDIV =
#pragma config USBDIV =
#pragma config FOSC =есть даташит, в нём приведено например следующее: (глава REGISTER 24-1: CONFIG1L: CONFIGURATION REGISTER 1 LOW)
Код: Выделить всё
bit 4-3 CPUDIV<1:0>: CPU System Clock Selection bits
11 = CPU system clock divided by 4
10 = CPU system clock divided by 3
01 = CPU system clock divided by 2
00 = No CPU system clock divide
Так всё же что писать в #pragma config ?
и где это брать?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
mcc18\doc\hlpPIC18ConfigSet.chm
-
Chettuser
Re: Програмирование pic на СИ.
Ё-маё! Я ж туда заглядывал... пару лет тому назад 