Страница 3 из 3

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Вт июл 28, 2020 22:06:02
BOB51
splan и layout при работе с ремонтами аппаратуры без техописаний (либо небольших по объёму одно/двусторонних платок контроллеров) осваивать в любом случае придется - вместе с макросъёмкой и частично фотошопом это элементы получения схем по имеющимся печатным платам.
Да и освоение там не сложнее, чем использование простого графического редактора типа paint.
Можно конечно и на бумаге от руки с последующим сканом - но то уже время на приведение к приличному виду придется мне (или кому другому) делать. А это уже лишняя морока для "от нечего делать помощи".
8)

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Ср авг 19, 2020 03:11:33
vladserebrya
нарисовал


где разьем перегрузка-туда подключается датчик воздуха, когда фильтр засорен, он замыкает, зажигается led перегрузки(если датчик разомкнуть-led гаснет, в общем тупо индикатор контакта). резистор R8-регулятор скорости.
Изображение


Добавлено after 24 minutes 57 seconds:
+эпюры синхронизация сети(pin 6) от сетевого U
Изображение

Добавлено after 2 minutes 58 seconds:
+эпюра выход на сим(pin10) относительно фазы при средней мощности
Изображение


если кто напишет на си или ассемблере-неважно, лижбы заработало. потом как нибудь попытаюсь осмыслить написанный код

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Вт ноя 17, 2020 19:07:48
vladserebrya
кто нибудь обьяснит почему даже за деньги никто не хочет помочь в написании кода? пусть он не на асме будет-неважно

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Вт ноя 17, 2020 19:33:37
otest
А что здесь приём жалоб и предложений???
https://radiokot.ru/forum/viewforum.php?f=53

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Ср ноя 18, 2020 17:31:58
vladserebrya
походу да. одному написал, отказался,без причин

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Чт ноя 19, 2020 16:41:42
jcxz
[uquote="vladserebrya",url="/forum/viewtopic.php?p=3926227#p3926227"]кто нибудь обьяснит почему даже за деньги никто не хочет помочь в написании кода? пусть он не на асме будет-неважно[/uquote]Видимо - дело не в деньгах..... а в их количестве. :)

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Чт ноя 19, 2020 20:11:11
BOB51
Кристалл не из широкоприменяемых в любительской практике, питание напрямую от 220...
Посему и интереса им заниматься особо нету...
Тем более, что практичкски само устройство по функционалу аналогия регулятора на К1182ПМ1...
КР1182ПМ1.pdf
(93.1 КБ) 229 скачиваний
:dont_know:

Re: вопрос по ассемблеру. PIC16f716 управляет симистором

Добавлено: Сб дек 19, 2020 15:30:42
pavel2000
Для всех желающих разобраться с прерываниями - под схему пылесоса написан небольшой код, иллюстрирующий их использование для задачи фазового регулятора.
Специально замечу, что высокий уровень на выходе RB4 - это отсутствие управляющего напряжения на симисторе, и наоборот - включение симистора осуществляется 0 на RB4.
Длительность включающего импульса - 0.64мс (соответствует осциллограмме).

Циклограмма работы:
Ждем фронт импульса синхронизации, сбрасываем таймер, выставляем значение задержки включения симистора.
Т.к. процессор ждет определенный фронт, каждый раз переключаем фронт на нужный.
Срабатывает таймер - включаем симистор, сбрасываем таймер, выставляем значение задержки выключения управляющего сигнала.
Срабатывает таймер - убираем управляющий сигнал, сбрасываем таймер и выставляем задержку на максимум (16мс), ждать новый импульс синхронизации ( <~10мс).

Код: Выделить всё

#if defined(__XC)
    #include <xc.h>         /* XC8 General Include File */
#elif defined(HI_TECH_C)
    #include <htc.h>        /* HiTech General Include File */
#endif

#include <stdint.h>        /* For uint8_t definition */
#include <stdbool.h>       /* For true/false definition */
#include "system.h"        /* System funct/params, like osc/peripheral config */

uint8_t phase = 0xFF;  //Force motor off by phase out of half-wave duration 

//void interrupt isr(void)
void __interrupt () ISR (void) {
    /* Determine which flag generated the interrupt and handle it */
    
    // RB0/ExtINT interrupt
    if(INTCONbits.INTF) { 
        INTCONbits.INTF = 0; /* Clear Interrupt Flag */
        
        //Edge found. Switch to find next edge
        if (OPTION_REGbits.INTEDG) { //Rising edge found
            OPTION_REGbits.INTEDG = 0; //Now will wait for falling edge
        }
        else { //Falling edge found
            OPTION_REGbits.INTEDG = 1; //Now will wait for rising edge
        }
        
        PR2 = phase;         //Set TRIAC turn-on delay
        TMR2 = 0;            //Reset Timer2 state
        PIR1bits.TMR2IF = 0; //Clear pending Timer2 IF
        PORTBbits.RB4 = 1;   //Disable TRIAC (force pin state)
    }
    
    //Timer2 PR2 match interrupt
    if (PIR1bits.TMR2IF) {
        PIR1bits.TMR2IF = 0;  /* Clear Interrupt Flag */
        
        if (PORTBbits.RB4 == 1) { //Triac pin is OFF
            PORTBbits.RB4 = 0;  //Set TRIAC ON
            PR2 = 0x0A;         //TRIAC on set for 10 * 64us = 0.64ms, next Timer2 interrupt will turn TRIAC pin OFF
        }
        else {
            PORTBbits.RB4 = 1;  //Set TRIAC OFF
            PR2 = 0xFF;         //PR2 should be set by edge, wait for sync.
        }
        TMR2 = 0;               //Reset Timer2 state
    }
}

void main(void) {
    /* Initialize I/O and Peripherals for application */
    PORTA = 0x04; //Turn off LED RA2
    PORTB = 0x10; //Turn off TRIAC RB4
    TRISA = 0x01; //RA0/AN0 - ADC input, RA2... outputs
    TRISB = 0x0F; //RB0-RB3 inputs, RB4... outputs
    OPTION_REG = 0x00; // RB0-interrupt on falling edge initially, Timer0/WDT not used
    
    T1CON = 0x00; // Timer1 Fosc/4 clock; 1:1 prescale, Timer1 disabled
    T2CON = 0x1F; // Timer2 Fosc/4 clock; 1:16 prescale, 1:4 postscaler, Timer2 enabled -- 4Mhz/16 = 62.5kHz = 16us/timer tick
    
    // PR2 will set TMR2IE interrupt period as: PR2 * 4 * 16us 
    // For 50Hz 10ms half-period time, we can use values 0-156 as phase delay.
    
    ADCON0 = 0xC0; // Use internal ADC RC oscillator, use AN0 input, ADC disabled (ADON=0)
    ADCON1 = 0x04; // Vref=VDD, AN0,AN1,AN3 - as analog inputs (RA2 - LED)
    
    PIR1 = 0; //Clear pending interrupt flags
    PIE1 = 0x02; //Enable TMR2IE (PR2 matched) interrupt
    
    INTCON = 0xD0; //Enable GIE (global interrupts) + PEIE (peripheral interrupts) + INTE (RB0/Ext INT)

    while(1) {
        phase = 0x75;  // phase = 117;  -- 7.5ms TRIAC phase delay, 25% of power.
    }
}
Добавлено after 20 minutes 48 seconds:
[uquote="vladserebrya",url="/forum/viewtopic.php?p=3872223#p3872223"]нет, это мне надо в томас прошивку написать, у них лоченые пики стоят. 12с509. если понадобиться, чтоб можно было код под любые порты любого пика написать. а тут от самсунга плата готовая лежит, потому на ней и хочу реализовать вначале[/uquote]

К сожалению, пример не особо поможет написать код под любые порты любого пика, хотя бы потому что упомянутый 12C(F)509 не умеет такой штуки как прерывания и код придется делать без них.