Суть устройства: на вход RA4 (из аналоговых AN3) поступает напряжение, в зависимости от режимов работы, в результате формируется импульс на выходе RA5 либо нет.
Режимы работы: 1) режим нормальной работы: напряжение на входе 9.5 В +делитель 1/7,2, должен формироваться импульс на выходе постоянно 2) режим аварии: напряжение от 13 до 22 В (всего три точки, 13, 17 и 22 В), импульса быть не должно.
По расчетам было забито изначально в функцию чтения АЦП значение для 12 В с делителем, которое равно 320, но на выходе ничего не формировалось вообще.
Со значением 140, которое в коде ниже программа работает но в обратном порядке и формирует импульс при режиме аварии. Может кто знает как инвертировать и в чем может быть проблема? С return и if все возможные перестановки делались, в итоге в двух режимах формировался импульс.
Если ошибка в расчетах, то где можно взять нормальную табличку напряжения, переведенного в значение АЦП?
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config CP = ON // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled) #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
#define _XTAL_FREQ 16000000
int count = 0;
void mydelay_ms(unsigned int cycles) { unsigned int i;
for (i = 1; i <= cycles; i++) { __delay_ms(1); } }
unsigned int calc_v(void) { int result_adc; unsigned long result_v;
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config CP = ON // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled) #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
#define _XTAL_FREQ 16000000
int count = 0;
void mydelay_ms(unsigned int cycles){ unsigned int i;
for (i = 1; i <= cycles; i++){ __delay_ms(1); } }
unsigned int calc_v(void){ int result_adc; unsigned long result_v;
while (1){ count = read_adc(3); if (count == 0){ PORTA = 0; mydelay_ms(100); PORTA = 0x20; mydelay_ms(25); PORTA = 0; } while (count == 0){ PORTA = 0; count = read_adc(3); } } }
Сразу ведь удобнее читать. И лишняя скобка } видна в конце (которую я убрал сразу), ну да с ней бы и не собралось бы вовсе )
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Bondosha писал(а):
1) режим нормальной работы: напряжение на входе 9.5 В +делитель 1/7,2, должен формироваться импульс на выходе постоянно 2) режим аварии: напряжение от 13 до 22 В (всего три точки, 13, 17 и 22 В), импульса быть не должно.
Вы сами поняли, что тут написали ? Расшифруйте ...
Аlex, режим нормальной работы: на входе 9/7.2 В, на выходе формируем импульс, с периодом 125 мс режим аварии: на входе 12/7.2 В и выше, на выходе должен быть 0
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Bondosha, при выравнивании справа, у вас в вернем байте старшие 6 бит равны 0, в младшем байте все 8 на своих местах. Вам надо старший байт сдвинуть на 8 бит не чтобы "выровнять", а чтобы получить 16-битное общее значение.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения