Jump to content

Recommended Posts

Добрый день.
Прошу помоши. Упорно не хочет читать единицу RB0. МК - PIC16F886. Для моделирования использую MPLABX+Proteus 8.4, язык ХС8 v1.33.

 

#include <xc.h>
/*#include "I2Cmay.h"
#include "LCD.h"
#include "Monitor.h"
#include "main.h"*/
#define _XTAL_FREQ (8000000)
#include <stdio.h>
#include <stdlib.h>

// CONFIG1
#pragma config FOSC = EXTRC_CLKOUT// Oscillator Selection bits (RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown Out Reset Selection bits (BOR disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal/External Switchover mode is disabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
#pragma config LVP = OFF        // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)

// CONFIG2
#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)

void main(void) {
    unsigned int temp;
    //nastroyka ();
    TRISB=0b00000001;
    while(1){
        if (RB0==0){
            RB1=1;
            RB1=0;
        }
         NOP();
    }
}

Внешнея подтяжка к 5В, однако постоянно заходит на строки в условии. Состояние регистров ANSELH=0, CCP1CON=0, CM2CON1=2, IOCB=0, INTCON=1, TRISB=1. В чем проблема не понимаю, грешил на протеус, переустановил с 8.1 на 8.4 - не помогло.
Чего я не так делаю?

 

Share this post


Link to post
Share on other sites

ANSEL=0. Но только в даташите, не сказано что данный регистр влияет на работу порта В.

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

Posted (edited)
10 минут назад, Bugrim сказал:

ANSEL=0. Но только в даташите, не сказано что данный регистр влияет на работу порта В.

Кроме ANSEL есть ANSELH, в котором есть бит ANS12, вот он и управляет аналоговой функцией RB0/AN12.

Для вывода в RB0 достаточно сбросить в ноль оный бит и сбросить в ноль нулевой бит регистра TRISB.

Edited by my504

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

Posted (edited)

Я не обратил внимания на потребность в чтении. 

А чем гарантируется высокий уровень на RB0?

Edited by my504

Share this post


Link to post
Share on other sites
Posted (edited)

Внешний подтягивающий резистор.

5c8b83786f3f6_.thumb.jpg.e5c3ed003ca5cb2895f589aa78935242.jpg

Edited by Bugrim

Share this post


Link to post
Share on other sites

Может все таки протеус глючит? Подскажите стабильную версию.

Share this post


Link to post
Share on other sites

Самая стабильная версия - это железо !
Что мешает проверить на реальном проце ?

Share this post


Link to post
Share on other sites

Проверит на самой стабильной версии - работает. Теперь стабильный протеус найти надо.

Share this post


Link to post
Share on other sites
Posted (edited)

Подскажите,а для чего помимо простого приоритета прерываний в количестве 8,еще и есть субприоритет прерываний в количестве 4?(Я конкретно указывал количество для pic32MX,там еще около 100 источников прерываний оказывается) Просто для более удобного разделения приоритетов или есть тайный смысл?

Edited by BiBOX

Share this post


Link to post
Share on other sites
В 17.03.2019 в 19:41, Bugrim сказал:

Проверит на самой стабильной версии - работает. Теперь стабильный протеус найти надо.

Не припомню что бы хоть какой нибудь протес симулировал с ошибкой или глючил для пик 12 16 18 было когда я усомнился но в итоги нашёл ошибку в коде

Share this post


Link to post
Share on other sites

То же по началу было плохое мнение о протеусе, но как всегда виновником оказался человеческий фактор и кривой код.

Share this post


Link to post
Share on other sites

привет. нужна помощь. в микропрограмах не понимаю нужно кориктировать и компилировать нашол инструкцию но ничего не получается.

делал по инструкции с сайта https://www.dropbox.com/s/h4g0k06w3kidu7c/Допомога новачкам або швидкий старт з MPLAB IDE.pdf?dl=0  не хочет компилироватся

---------------------------------------------------------------------- Debug build of project `C:\pic\spidometr\spid.mcp' started. Language tool versions: MPASMWIN.exe v5.30.01, mplink.exe v4.30.01, mplib.exe v4.49 Preprocessor symbol `__DEBUG' is defined. Mon Apr 15 18:27:00 2019 ---------------------------------------------------------------------- Очистка: Удаляю промежуточные и выходные файлы. Очистка: удалён файл "C:\pic\spidometr\spid.o". Очистка: удалён файл "C:\pic\spidometr\spid.err". Очистка: удалён файл "C:\pic\spidometr\spid.lst". Очистка: удалён файл "C:\pic\spidometr\spid.cof". Очистка: удалён файл "C:\pic\spidometr\spid.hex". Очистка: удалён файл "C:\pic\spidometr\spid.mcs". Очистка: готово. Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F873A "spid.asm" /l"spid.lst" /e"spid.err" /o"spid.o" /d__DEBUG=1 /c- Warning[207] C:\PIC\SPIDOMETR\SPID.ASM 166 : Found label after column 1. (SEG7) Message[302] C:\PIC\SPIDOMETR\SPID.ASM 282 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 286 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 290 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 294 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 300 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 304 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 308 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1066 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1070 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1072 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1076 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1120 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1128 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1132 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1134 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1138 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1142 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1144 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1146 : Register in operand not in bank 0.  Ensure that bank bits are correct. Message[302] C:\PIC\SPIDOMETR\SPID.ASM 1150 : Register in operand not in bank 0.  Ensure that bank bits are correct. Error[113]   C:\PIC\SPIDOMETR\SPID.ASM 1232 : Symbol not previously defined (CHATOD) Halting build on first failure as requested. ---------------------------------------------------------------------- Debug build of project `C:\pic\spidometr\spid.mcp' failed. Language tool versions: MPASMWIN.exe v5.30.01, mplink.exe v4.30.01, mplib.exe v4.49 Preprocessor symbol `__DEBUG' is defined. Mon Apr 15 18:27:01 2019 ---------------------------------------------------------------------- BUILD FAILED

исходник во вложении кто поможет за небольшое вознаграждение

Исходник программы для спидометра-одометра.txt

Share this post


Link to post
Share on other sites

перед конфигом поставьте

Цитата

    errorlevel  -302              ; suppress message 302 from list file

и строка 1232 пытается вызвать несуществующую процедуру Chanod , есть ChAnod

Share this post


Link to post
Share on other sites

Здравствуйте.

Притащили посмотреть две платы управления.

На плате стоит 12F508. На его входе датчик вибрации, на выходе оптрон. Горелого ничего нет. Питание исправно.

Программатором PIC читается, содержимое на обеих платах одинаковое.

МК стоят в соккетах, третья нога каждого зачем-то отогнута.

Вопрос к опытным: существует ли дизассемлер к этому PIC, и если да, то какой попроще? Программа в МК маленькая, хотелось бы понять алгоритм.

 

 

 

 

Share this post


Link to post
Share on other sites

Может быть залочен? 

3 часа назад, ART_ME сказал:

содержимое на обеих платах одинаковое.

В студию оба.  

Share this post


Link to post
Share on other sites
4 часа назад, ART_ME сказал:

существует ли дизассемлер к этому PIC, и если да, то какой попроще?

Дизассемблер он и в Африке дизасемблер :) проще ассемблера ничего не бывает, ну если только перфокарты :) !

Да он наверно в единственном экземпляре, в ПИКовской среде разработки надо искать, если по аналогии с АВР-ми рассуждать попробуйте в их среде найти возможность запустить в симуляторе считанный файл hex, elf, ... какой там он у вас.

Share this post


Link to post
Share on other sites

считывай с расширением .HEX, инече в дизасме ничего не увидишь.

 

Share this post


Link to post
Share on other sites

Программатором нельзя скачать HEX, только бинарник.

Но я скачал конвертер, и получил приложенный файл.

Дизассемблер PIC поймет его? Спрашиваю потому, что HEX бывает разный (в отличие от BIN).

 

12F508-1.HEX

Share this post


Link to post
Share on other sites

это не хекс.... код генерируемый дисасмом не рабочий

56 минут назад, ART_ME сказал:

Программатором нельзя скачать HEX

а шо это за прогер для пыков не поддерживавший хекс????

Share this post


Link to post
Share on other sites
8 минут назад, IMXO сказал:

а шо это за прогер для пыков не поддерживавший хекс????

Это не прогер для пыков, это просто прогер. Который считывает и записывает бинарные файлы, в т.ч. и для некоторых пыков. 

Короче, качаю MPLAB.

 

Share this post


Link to post
Share on other sites

а смысл? как мне помнится мплаб тоже бантики не поддерживает.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By denisovdenisvladimirovit
      Нуждаюсь в помощи! Задумал сделать лабораторный блок питания, регулируемый. 0 - 50... 55в, 10 - 15а постоянного тока. трансформатор с мостом + выдают где - то 54,5в. Подскажите схему стабилизированного регулятора напряжения, или подскажите по моей. В моей регулировка по первичной обмотки без стабилизации, вообще рабочая или нет. Я сам новичок, судите строго!!!

      I need help(помогите и объясните дуракУ) опечатался((( Простите...
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • Guest Денис
      By Guest Денис
      В общем, есть такое чудо китайской техники (фото)
      Что оно может:
      1. Заряжаться через microUSB порт
      2. Кнопка вкл/выкл, она же переключает режимы
      3. 3 режима свечения светодиода (он светит разными цветами)
      Что я хочу сделать:
      1. Пункты 1 и 2 выше
      2. Разнообразить количество режимов, переливание статичный цвет и тд...
      Вопрос: как это сделать? что купить?

      P.S. К сожалению, в гугле не нашел подробной инструкции, а я в электронике я дуб дубом


×
×
  • Create New...