Нужна помощь в прошивке для PIC.

помощь начинающим осваивать программирование МК (PIC, AVR) на Си.

Модератор: koolhatcker

Ответить
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Нужна помощь в прошивке для PIC.

Сообщение Dj_smart »

Народ, кто шарит в сях для пиков, нужна помощь. Есть схемка электронного зажигания на PIC'e. Автоматически выставляет опережение в зависимости от оборотов. Процессор PIC16F628A. На 7-ю ногу приходит сигнал от датчика, с 6-й идёт запуск на искру. Ну и там тестовые входа, в исходнике есть "текстовая схема". Но тут есть одно НО. Зажигание тиристорное, заряжается конденсатор от преобразователя, и разряжается через тиристор и катушку зажигания во время искры. И вот в этот момент выход преобразователя оказывается закороченым на корпус. Транзистор не перегревается, импульсы короткие... правда часто:(. И КПД этого устройства получается как у паровоза. А питается оно от аккумулятора, вот и... Преобразователь переделал, задающий на 555 таймере, ключ- полевик. Суть задачки: надо на каую-то ногу пика перед выдачей "1" на 6-ю ногу проца, выдавать уровень "0", и менять его на "1" по окончании импульса на 6-й ноге. Хочу этим нолём глушить таймер по 4-й ноге, чтобы преобразователь в момент искры не работал. Вот тут исходник, там собсно пояснений больше чем... Но не шарю в этих делах, а его ещё и откомпилить надо...
Показать/Спрятать
void test() { //Generate test signal
while (1){
PORTB &= 0xee; // sends a ground to the SCR gate
delay_us(56); // 56 us delay
PORTB |= 0x11; // ground off the SCR
if (PORTB & 0x04) delay_ms(200); //300 rpm
else delay_ms(8); //7500 RPM
}
}

void main() {
const char tspark[]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 10, 12, 12, 12, 14, 14, 14, 17, 17, 17, 20, 20, 20, 22, 23, 25, 25, 28, 28, 31, 31, 34, 34, 37, 38, 40, 41, 44, 44, 44, 48, 48, 48, 51, 52, 52, 53, 56, 56, 57, 57, 61, 61, 62, 62, 63, 63, 63,
64, 64, 68, 68, 69, 69, 70, 70, 71, 71, 72, 72, 73, 73, 74, 74, 75, 75, 79, 80, 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 90, 91, 91, 92, 92, 93, 93, 94, 94, 95, 96, 96, 97, 97, 98, 98, 99, 99, 100, 100, 101, 106, 106, 107, 107, 108, 108, 109, 110, 110, 111, 111, 112, 112, 113, 113, 114, 115, 115, 116, 116, 117, 117, 118, 118, 119, 120, 120, 121, 121, 122, 122, 123, 123, 124, 125, 125, 126, 126, 127, 127, 128, 128, 129, 130, 130, 131, 131, 132, 132, 133, 133, 134, 134, 135, 136, 136, 137, 137, 138, 138, 139, 140, 140, 141, 141, 142};
short int spark=0;
unsigned int tspk, t0,t1,low;
unsigned int ofc; //Holds number of overflows

const unsigned int LowDelay=25; //Delay <1832> 0) { //Overflow timer0, we have <1832>= 36) ofc=36; //Min RPM 50 to avoid big calculations
low=ofc*ld; //Simplified calculation, gives about 25 degrees
delay_cyc (low); //extra delay based on overflow counter
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low); //Repeat 16 times - prescaler
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
delay_cyc (low);
} //max255 -> 2550 cycles
tspk = tspark[t0]; //use table lookup for spark delay
T2CON = 0x07; //start TMR2 counter 1:16
TMR2= 0; //clear spark timer
while(TMR2 < tspk);//loop until timeout to send spark
PORTB &= 0xee; //sends a ground to the SCR gate
delay_us(56); //56 us delay
PORTB |= 0x11; //ground off the SCR
spark = 0;
} //if(spark)
} //while(1)
} //main

////////////////////////////////////////////////////////////////////
//Notes
//
// ; At a engine speed of 1200 RPM;
// ;
// ; 1200 / 60 = 20 revs per second
// ; 1 / 20 = 50mS per rev
// ; 1 rev = 360 degrees
// ;
// ; 36 degrees at 1200 RPM = (36 / 360) X 50 = 5mS
// ;
// ; 100uS loop time
// ; 4MHz clock / 4 = 1MHz instruction cycle
// ; cycle time = 1/1MHz = 100uS
// ; 100uS/100uS = 100 cycles
// ; prescaler set to divide by 4
// ; preset TMR0 = 231, when = 0 = 100uS
// ; 231 to 255 = 25 x 4(prescaler) = 100


// ---O---
// RA2 o o RA1
// RA3 o o RA0
// RA4 o o RA7
// RA5 o o RA6
// VSS o o VDD
// SCR RB0 o o RB7
// Hall input USART RX RB1 o o RB6
// Test hi/low USART TX RB2 o o RB5
// Test on/off RB3 o o RB4 Strobelight
// -------

//History:
//1.0 1832fix not working
Последний раз редактировалось Dj_smart 02 апр 2011, 09:19, всего редактировалось 2 раза.
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

его ещё и откомпилить надо...
Это невозможно. Исходник не полный.
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Исходник не полный.
Согласен, уже доглядел:). Мало того что не вставилось всё, так еще и с самого начала изначально не было .. ну определений, или как там правильно.
Короче тему в утиль.
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Короче тему в утиль.
Можно и так. А можно и hex подшаманить ;). Либо вобще с нуля написать :D.
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Либо вобще с нуля написать :D.
Да думал я напроситься... Но со следующего понедельника в госпиталь падаю, а тестить- ещё двигун полусобран, короче одни НО.
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
VVChaif
Начальник форума
Сообщения: 2438
Зарегистрирован: 26 авг 2009, 00:00
Имя: Виталий
Откуда: Краснодарский край. ст. Каневская
Контактная информация:

Сообщение VVChaif »

Dj_smart, http://www.twowheel-oppozit.narod.ru/
тут поройся. я для своего ИЖа собирал :)
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Спасибо, видел, но не вникал:). Нарыл столько, что уже сам путаюсь :ggg:
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

VVChaif, класс! Для особо одарённых :ggg: . Господа программеры, а как обойтись без внешнего кварца 4мГц для 628-го пика? Тут копать надо:
; Конфигурация ------------------------------------------------------------------------------------

__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC & _MCLRE_OFF & _LVP_OFF & _DATA_CP_OFF & _BODEN_OFF

Или?
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
Аватара пользователя
Germie
Станкостроитель
Станкостроитель
Сообщения: 128
Зарегистрирован: 19 апр 2010, 00:00
Откуда: Харьков
Контактная информация:

Сообщение Germie »

Dj_smart писал(а):Господа программеры, а как обойтись без внешнего кварца 4мГц для 628-го пика? Тут копать надо:
; Конфигурация ------------------------------------------------------------------------------------

__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC & _MCLRE_OFF & _LVP_OFF & _DATA_CP_OFF & _BODEN_OFF

Или?
Здесь, здесь. Вместо _XT_OSC должно быть _INTRC_OSC_NOCLKOUT. Тем самым МК переключается на внутренний генератор без вывода наружу тактовой последовательности.

Удачи.
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Germie, отлично! Спасибо! Только... А как ему сказать что надо 4мГц?
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Нашёл! :dance: Если внутренний- то только 4 мега. Вот тут русская дока на множество пиков http://kazus.ru/guide/microchip/index.html
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
Аватара пользователя
Germie
Станкостроитель
Станкостроитель
Сообщения: 128
Зарегистрирован: 19 апр 2010, 00:00
Откуда: Харьков
Контактная информация:

Сообщение Germie »

Dj_smart писал(а):Нашёл! :dance: Если внутренний- то только 4 мега. Вот тут русская дока на множество пиков http://kazus.ru/guide/microchip/index.html
Угу, у этого Пика только два режима работы внутреннего генератора - с выводом тактирования наружу и без него. И оба только с частотой 4 МГц.
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Народ, кто может переделать это на пик 628А, и чтобы без кварца? А то всё на движке висит, надёжность нулевая:(. Там "схема" в текстовом виде есть...
Показать/Спрятать
;=========================================================================
;;CDI for model engines
;Based on "Bike Advance" 4.23
;V1.0 09.14.2005 Jon-Magne Johansen
;=========================================================================
;==========================================================================
; Title "Zenoah Advance"
; http://www.modelbouw.gompy.net/cdi/cdi.htm
; 23 01 06 Version 1.00 for 16F84a GOMPY
; -------------------------------------------------------------------------
;============================================================================
;переработка программы и исправление ошибок by how_eee для своих нужд. 27.04.2010
;
;Моя первая версия. Поправил назначение portА в качестве входа и перенес
;вход ДХ со второй ноги на первую.
;Подправил время проверки что двиг не работает 0.5сек.
;Изменил проверку выключения тестового джампера. Изменил
;время открытия тиристора с 0.002 на 0.001сек во время теста.
;Добавил индикатор первой искры. Первичное опережение определяется выбранным джамперами
;графиком.
;Нарисовал новый график. ДХ стоит в положени 32 гр до ВМТ.
;1500 об - 0,5 гр
;2500 об - 9 гр
;3500 об - 13 гр
;5000 об - 25 гр
;6000 об - 32 гр и до 16000 об.
;Добавил еще два графика, которые выбираются джамперами на 17 и 18 ноге. Если
;джямперов нет, то первый график, если джампер стоит на 17 ноге, то второй,
;если на 18, то третий.
;
;проверил работу прошивки на самолете. все ОК!
;==========================================================================

;
; Ign advance starts at 1500 engine RPM
;
; Ign full advance is at 16000 engine RPM
;
; dwell time is fixed at 1mS, = 10 X 100uS loops
;
; After 1500 RPM, the ignition advance is calculated in 116 steps.
; This continues up until 16000 RPM is reached.
;
;
; At a engine speed of 1200 RPM;
;
; 1200 / 60 = 20 revs per second
; 1 / 20 = 50mS per rev
; 1 rev = 360 degrees
;
; 36 degrees at 1200 RPM = (36 / 360) X 50 = 5mS
;
; Therefore maximum retard at 1200 RPM = 0mS after the firing
; point is reached. This figure remains constant down to 0 RPM.
;
; At a engine speed of 16000 RPM, maximum advance will have been reached,
; and ignition is immediately after the firing point is reached.
;
; The intermediate values will be looked up in an advance table map
; and will correspond to engine speed from 1500 RPM to 16000 RPM.
;
; Map holds retard values in 100uS loops for every loop change
; in rpm rate.
;
;
;
;==========================================================================
;
; PIC 16F84 wiring
;
;==========================================================================

;
; pickup32°-----------> RA2 1+--O--+18 RA1 ------ map3 jumper select
; RA3 2| |17 RA0 ------ map2 jumper select
; test jumper---------> RA4 3| |16 Osc ------ 4MHz
; +5V--+----R---------> MCLR 4| |15 Osc ------ Quartz
; Ground--------------- Vss 5| |14 Vcc ------ +5Vdc
; Thyristor <RB0>PickupLED
; LEDrpmLimit <------- RB1 7| |12 RB6
; ReverseOutput<------- RB2 8| |11 RB5
; Strobe<RB3> 1400h, 5120 x 100us=0.5 Secs, then it is assumed that the
; motor has stopped. Reinitialize system.
movlw 0x14
subwf rpmhi,W
btfsc STATUS,Z ; rpmhi - 14 = 0 ?
goto start ; yes
;

;rotchk btfss rotor ; + is rotor high or low?
rotchk btfsc rotor ; (- detect pickup low) (CH ignitions sensor)
goto rnowlw ; low нету магнита
;
movf rotflg,W ; high, is it flagged high also? rotflg=FF?
btfss STATUS,Z
goto coilck ; yes
;
movlw 0xff ; no
movwf rotflg ; flag rotor as up
bsf led ; turn ignition pickup led on
clrf spkflg ; reset flag for one spark
goto rpmcalc ; calculate RPM
;

rnowlw movf rotflg,W ; is it flagged low already ? rotflg=0?
btfsc STATUS,Z
goto coilck ; yes, wasn't flagged high
;

dolow bcf led ; no, turn ignition pickup led off
clrf rotflg ; flag rotor as down
goto mnloop
;

decret decf retard,F ; no, decrement retard then wait
goto mnloop
;

coilck movf coilflg,W ; is coil flagged high? coilflg=FF?
btfss STATUS,Z
goto upcoil ; yes, then decrement dwell count
movf retard,W ; is retard = 0 ?
btfss STATUS,Z
goto decret ; no, then decrement retard
;
movf spkflg,W ; yes, a spark have been done? spkflg=FF?
btfss STATUS,Z
goto mnloop ; yes, no more spark
;
bsf coil ; no, go on for the first spark
bsf strobe ; same for strobe
bcf revcoil
movlw 0xff ; set flag for high coil
movwf coilflg
movwf spkflg ; set flag for one spark

; ****************** YOU CAN MODIFY THE DWELL VALUE BELLOW ********
movlw .1 ; 10 X 100uS = 1ms
movwf dwell ; set dwell time
;
goto mnloop
;

upcoil ; if dwell # 0 then dwell - 1
; if dwell now = 0, turn on coil
;
decfsz dwell,F ; dwell = dwell - 1
goto mnloop ; dwell <> 0, wait
bcf coil ; dwell = 0, turn coil off
bcf strobe ; same with strobe
bsf revcoil ; dwell = 0, turn revcoil on
clrf coilflg ; set flag for low coil
goto mnloop
;

rpmcalc ; engine RPM <1500>= 16000 at maximum advance, = 3.8mS
; 3.8mS = 38 X 100uS loops, = 26h
; ( 16000RPM for a 1cyl - 4stroke with one spark loose )
; ( 16000RPM for a 1cyl - 2stroke )
; ( 8000RPM for a 4cyl - 4stroke = 266Hz )
;
; this routine determines whether the engine RPM
; value is below 38 loop counts - max advance, or above
; 400 loop counts - max retard, or some where in between.
;
;
; high RPM: ; > 16000RPM
; Если ИСКРА ПЕРВАЯ, то идем сразу в maxret

movf firstspk,W
btfss STATUS,Z ; is firstspk = 0?
goto maxret ; no


movf rpmhi,W ; yes
btfss STATUS,Z ; is rpmhi = 0?
goto bigfv ; no
;
movf rpmlo,W
xorlw 0x26 ; yes, is rpmlo = 26h ?
btfsc STATUS,Z
goto maxadv ; yes, do max advance
;
movlw 0x26
subwf rpmlo,W ; no, is rpmlo < 26h ?
btfss STATUS,C
goto maxadv ; yes, do max advance
;
; medium RPM:
goto caladv ; no, calculate new advance
;
;
; low RPM: ; <1500RPM> 1 ?
btfsc STATUS,C
goto maxret ; yes, do max retard
;
goto caladv ; no, calculate new advance
;
resfv movf rpmlo,W
xorlw 0x90 ; rpmhi = 1, does rpmlo = 90h ?
btfsc STATUS,Z
goto maxret ; yes, do max retard
;
movlw 0x90
subwf rpmlo,W ; no, is rpmlo > 90h ?
btfsc STATUS,C
goto maxret ; yes, do max retard
;
;
; the formula to get the data stored in the map is as follows
;
; rpmhi/lo count - 37
; 116 - ---------------------------
; 4
;
caladv movlw d'37' ; rpmhi/lo - 37
subwf rpmlo,F ; rpmlo = rpmlo - 37
btfss STATUS,C
decf rpmhi,F
;
; divide result by 4
;
bcf STATUS,C
rrf rpmhi,F
rrf rpmlo,F ; / 2
;
bcf STATUS,C
rrf rpmhi,F
rrf rpmlo,F ; / 4
;
;bcf STATUS,C
;rrf rpmhi,F
;rrf rpmlo,F ; / 8
;
movlw .116 ; 116 entries in map list
movwf math
;
movf rpmlo,W
subwf math,W ; W = 116 - result

btfss k2 ;ПРОВЕРКА джампер стоит? к2=0?
goto selmap2 ;Да, ИДТИ selmap2

btfss k3 ;ПРОВЕРКА джампер стоит? к3=0?
goto selmap3 ;Да, ИДТИ selmap3

;

selmap1 bcf PCLATH,1 ; be sure to go h'100'
bsf PCLATH,0 ; where is the map1.
call map1 ; read map1
movwf rtdset ; come back with new retard value
goto rpmset

;

selmap2 bcf PCLATH,0 ; be sure to go h'200'
bsf PCLATH,1 ; where is the map2.
call map2 ; read map2
movwf rtdset ; come back with new retard value
goto rpmset

;

selmap3 bsf PCLATH,1 ; be sure to go h'300'
bsf PCLATH,0 ; where is the map3.
call map3 ; read map3
movwf rtdset ; come back with new retard value


rpmset clrf rpmhi ; clear RPM counters
clrf rpmlo
movf rtdset,W ; transfert advance value
movwf retard
goto mnloop ; (therefore minimum retard is 1 loop-100us)
;
maxret clrf firstspk ;очищаем флаг первой искры

btfss k2 ;ПРОВЕРКА джампер стоит? к2=0?
movlw 0x32 ;Да, задержка вторая 5,0 на 1500 это 27 гр

btfss k3 ;ПРОВЕРКА джампер стоит? к3=0?
movlw 0x28 ;Да, задержка третья 4,0 на 1500 это 36 гр


movlw 0x23 ;нет, задержка первая 3,5 на 1500 это 31,5 гр
movwf rtdset ; retard value
bcf rpmmax ; turn off maxrpm led
goto rpmset
;
maxadv clrf rtdset ; retard value = 0ms
bsf rpmmax ; turn on maxrpm led
goto rpmset
;
map1 org h'100' ; store map at100h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************

retlw 23h ; 3.5ms
retlw 23h ; 3.5ms 1503rpm
retlw 23h ; 3.5ms 1517rpm
retlw 22h ; 3.4ms 1531rpm
retlw 22h ; 3.4ms 1545rpm
retlw 22h ; 3.4ms 1559rpm
retlw 21h ; 3.3ms 1573rpm
retlw 21h ; 3.3ms 1587rpm
retlw 20h ; 3.2ms 1601rpm
retlw 20h ; 3.2ms 1616rpm
retlw 20h ; 3.2ms 1631rpm
retlw 1Fh ; 3.1ms 1646rpm
retlw 1Fh ; 3.1ms 1661rpm
retlw 1Eh ; 3ms 1677rpm
retlw 1Eh ; 3ms 1692rpm
retlw 1Eh ; 3ms 1708rpm
retlw 1Dh ; 2.9ms 1724rpm
retlw 1Dh ; 2.9ms 1741rpm
retlw 1Dh ; 2.9ms 1758rpm
retlw 1Ch ; 2.8ms 1775rpm
retlw 1Ch ; 2.8ms 1792rpm
retlw 1Ch ; 2.8ms 1809rpm
retlw 1Bh ; 2.7ms 1827rpm
retlw 1Bh ; 2.7ms 1846rpm
retlw 1Ah ; 2.6ms 1864rpm
retlw 19h ; 2.5ms 1883rpm
retlw 19h ; 2.5ms 1902rpm
retlw 19h ; 2.5ms 1922rpm
retlw 18h ; 2.4ms 1942rpm
retlw 18h ; 2.4ms 1962rpm
retlw 17h ; 2.3ms 1983rpm
retlw 17h ; 2.3ms 2004rpm
retlw 16h ; 2.2ms 2026rpm
retlw 16h ; 2.2ms 2048rpm
retlw 15h ; 2.1ms 2070rpm
retlw 15h ; 2.1ms 2093rpm
retlw 15h ; 2.1ms 2116rpm
retlw 14h ; 2ms 2140rpm
retlw 14h ; 2ms 2165rpm
retlw 13h ; 1.9ms 2190rpm
retlw 13h ; 1.9ms 2215rpm
retlw 13h ; 1.9ms 2241rpm
retlw 12h ; 1.8ms 2268rpm
retlw 12h ; 1.8ms 2295rpm
retlw 12h ; 1.8ms 2323rpm
retlw 11h ; 1.7ms 2351rpm
retlw 10h ; 1.6ms 2381rpm
retlw 10h ; 1.6ms 2411rpm
retlw 10h ; 1.6ms 2441rpm
retlw 10h ; 1.6ms 2473rpm
retlw 0Fh ; 1.5ms 2505rpm
retlw 0Fh ; 1.5ms 2538rpm
retlw 0Fh ; 1.5ms 2572rpm
retlw 0Fh ; 1.5ms 2606rpm
retlw 0Eh ; 1.4ms 2642rpm
retlw 0Eh ; 1.4ms 2679rpm
retlw 0Eh ; 1.4ms 2716rpm
retlw 0Eh ; 1.4ms 2755rpm
retlw 0Dh ; 1.3ms 2795rpm
retlw 0Dh ; 1.3ms 2836rpm
retlw 0Dh ; 1.3ms 2878rpm
retlw 0Ch ; 1.2ms 2921rpm
retlw 0Ch ; 1.2ms 2965rpm
retlw 0Ch ; 1.2ms 3011rpm
retlw 0Bh ; 1.1ms 3059rpm
retlw 0Bh ; 1.1ms 3107rpm
retlw 0Bh ; 1.1ms 3158rpm
retlw 0Bh ; 1.1ms 3210rpm
retlw 0Ah ; 1ms 3263rpm
retlw 0Ah ; 1ms 3319rpm
retlw 0Ah ; 1ms 3376rpm
retlw 9h ; 0.9ms 3435rpm
retlw 9h ; 0.9ms 3496rpm
retlw 9h ; 0.9ms 3560rpm
retlw 8h ; 0.8ms 3626rpm
retlw 8h ; 0.8ms 3694rpm
retlw 8h ; 0.8ms 3765rpm
retlw 7h ; 0.7ms 3838rpm
retlw 7h ; 0.7ms 3914rpm
retlw 6h ; 0.6ms 3994rpm
retlw 6h ; 0.6ms 4077rpm
retlw 5h ; 0.5ms 4163rpm
retlw 5h ; 0.5ms 4262rpm
retlw 5h ; 0.5ms 4346rpm
retlw 4h ; 0.4ms 4444rpm
retlw 4h ; 0.4ms 4546rpm
retlw 3h ; 0.3ms 4653rpm
retlw 3h ; 0.3ms 4765rpm
retlw 3h ; 0.3ms 4883rpm
retlw 2h ; 0.2ms 5006rpm
retlw 2h ; 0.2ms 5136rpm
retlw 2h ; 0.2ms 5273rpm
retlw 1h ; 0.1ms 5417rpm
retlw 1h ; 0.1ms 5569rpm
retlw 1h ; 0.1ms 5729rpm
retlw 1h ; 0.1ms 5899rpm
retlw 0h ; 0ms 6080rpm
retlw 0h ; 0ms 6272rpm
retlw 0h ; 0ms 6476rpm
retlw 0h ; 0ms 6693rpm
retlw 0h ; 0ms 6926rpm
retlw 0h ; 0ms 7176rpm
retlw 0h ; 0ms 7443rpm
retlw 0h ; 0ms 7732rpm
retlw 0h ; 0ms 8044rpm
retlw 0h ; 0ms 8381rpm
retlw 0h ; 0ms 8748rpm
retlw 0h ; 0ms 9149rpm
retlw 0h ; 0ms 9587rpm
retlw 0h ; 0ms 10070rpm
retlw 0h ; 0ms 10604rpm
retlw 0h ; 0ms 11196rpm
retlw 0h ; 0ms 11859rpm
retlw 0h ; 0ms 12605rpm
retlw 0h ; 0ms 13451rpm
retlw 0h ; 0ms 14418rpm
retlw 0h ; 0ms 15534rpm


; *********** END OF YOUR OWN VALUES ******************************

retlw 8h ; in case of overlap
; line544
;
; reset vector
;
;


map2 org h'200' ; store map at200h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************

retlw 1Eh ; 3ms
retlw 1Eh ; 3ms 1503rpm
retlw 1Eh ; 3ms 1517rpm
retlw 1Eh ; 3ms 1531rpm
retlw 1Dh ; 2.9ms 1545rpm
retlw 1Dh ; 2.9ms 1559rpm
retlw 1Dh ; 2.9ms 1573rpm
retlw 1Dh ; 2.9ms 1587rpm
retlw 1Dh ; 2.9ms 1601rpm
retlw 1Dh ; 2.9ms 1616rpm
retlw 1Dh ; 2.9ms 1631rpm
retlw 1Dh ; 2.9ms 1646rpm
retlw 1Dh ; 2.9ms 1661rpm
retlw 1Dh ; 2.9ms 1677rpm
retlw 1Dh ; 2.9ms 1692rpm
retlw 1Dh ; 2.9ms 1708rpm
retlw 1Dh ; 2.9ms 1724rpm
retlw 1Dh ; 2.9ms 1741rpm
retlw 1Dh ; 2.9ms 1758rpm
retlw 1Dh ; 2.9ms 1775rpm
retlw 1Ch ; 2.8ms 1792rpm
retlw 1Ch ; 2.8ms 1809rpm
retlw 1Ch ; 2.8ms 1827rpm
retlw 1Ch ; 2.8ms 1846rpm
retlw 1Ch ; 2.8ms 1864rpm
retlw 1Bh ; 2.7ms 1883rpm
retlw 1Bh ; 2.7ms 1902rpm
retlw 1Bh ; 2.7ms 1922rpm
retlw 1Bh ; 2.7ms 1942rpm
retlw 1Ah ; 2.6ms 1962rpm
retlw 1Ah ; 2.6ms 1983rpm
retlw 1Ah ; 2.6ms 2004rpm
retlw 19h ; 2.5ms 2026rpm
retlw 19h ; 2.5ms 2048rpm
retlw 19h ; 2.5ms 2070rpm
retlw 18h ; 2.4ms 2093rpm
retlw 18h ; 2.4ms 2116rpm
retlw 18h ; 2.4ms 2140rpm
retlw 17h ; 2.3ms 2165rpm
retlw 17h ; 2.3ms 2190rpm
retlw 16h ; 2.2ms 2215rpm
retlw 16h ; 2.2ms 2241rpm
retlw 16h ; 2.2ms 2268rpm
retlw 15h ; 2.1ms 2295rpm
retlw 15h ; 2.1ms 2323rpm
retlw 14h ; 2ms 2351rpm
retlw 14h ; 2ms 2381rpm
retlw 14h ; 2ms 2411rpm
retlw 13h ; 1.9ms 2441rpm
retlw 13h ; 1.9ms 2473rpm
retlw 13h ; 1.9ms 2505rpm
retlw 12h ; 1.8ms 2538rpm
retlw 12h ; 1.8ms 2572rpm
retlw 12h ; 1.8ms 2606rpm
retlw 12h ; 1.8ms 2642rpm
retlw 11h ; 1.7ms 2679rpm
retlw 11h ; 1.7ms 2716rpm
retlw 11h ; 1.7ms 2755rpm
retlw 11h ; 1.7ms 2795rpm
retlw 10h ; 1.6ms 2836rpm
retlw 10h ; 1.6ms 2878rpm
retlw 10h ; 1.6ms 2921rpm
retlw 0Fh ; 1.5ms 2965rpm
retlw 0Fh ; 1.5ms 3011rpm
retlw 0Fh ; 1.5ms 3059rpm
retlw 0Eh ; 1.4ms 3107rpm
retlw 0Eh ; 1.4ms 3158rpm
retlw 0Eh ; 1.4ms 3210rpm
retlw 0Dh ; 1.3ms 3263rpm
retlw 0Dh ; 1.3ms 3319rpm
retlw 0Dh ; 1.3ms 3376rpm
retlw 0Ch ; 1.2ms 3435rpm
retlw 0Ch ; 1.2ms 3496rpm
retlw 0Bh ; 1.1ms 3560rpm
retlw 0Bh ; 1.1ms 3626rpm
retlw 0Ah ; 1ms 3694rpm
retlw 9h ; 0.9ms 3765rpm
retlw 8h ; 0.8ms 3838rpm
retlw 7h ; 0.7ms 3914rpm
retlw 6h ; 0.6ms 3994rpm
retlw 5h ; 0.5ms 4077rpm
retlw 4h ; 0.4ms 4163rpm
retlw 4h ; 0.4ms 4262rpm
retlw 4h ; 0.4ms 4346rpm
retlw 3h ; 0.3ms 4444rpm
retlw 3h ; 0.3ms 4546rpm
retlw 2h ; 0.2ms 4653rpm
retlw 1h ; 0.1ms 4765rpm
retlw 1h ; 0.1ms 4883rpm
retlw 0h ; 0ms 5006rpm
retlw 0h ; 0ms 5136rpm
retlw 0h ; 0ms 5273rpm
retlw 0h ; 0ms 5417rpm
retlw 0h ; 0ms 5569rpm
retlw 0h ; 0ms 5729rpm
retlw 0h ; 0ms 5899rpm
retlw 0h ; 0ms 6080rpm
retlw 0h ; 0ms 6272rpm
retlw 0h ; 0ms 6476rpm
retlw 0h ; 0ms 6693rpm
retlw 0h ; 0ms 6926rpm
retlw 0h ; 0ms 7176rpm
retlw 0h ; 0ms 7443rpm
retlw 0h ; 0ms 7732rpm
retlw 0h ; 0ms 8044rpm
retlw 0h ; 0ms 8381rpm
retlw 0h ; 0ms 8748rpm
retlw 0h ; 0ms 9149rpm
retlw 0h ; 0ms 9587rpm
retlw 0h ; 0ms 10070rpm
retlw 0h ; 0ms 10604rpm
retlw 0h ; 0ms 11196rpm
retlw 0h ; 0ms 11859rpm
retlw 0h ; 0ms 12605rpm
retlw 0h ; 0ms 13451rpm
retlw 0h ; 0ms 14418rpm
retlw 0h ; 0ms 15534rpm



; *********** END OF YOUR OWN VALUES ******************************

retlw 8h ; in case of overlap



map3 org h'300' ; store map3 at300h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************

retlw 23h ; 3.5ms
retlw 20h ; 3.2ms 1503rpm
retlw 20h ; 3.2ms 1517rpm
retlw 20h ; 3.2ms 1531rpm
retlw 1Fh ; 3.1ms 1545rpm
retlw 1Fh ; 3.1ms 1559rpm
retlw 1Fh ; 3.1ms 1573rpm
retlw 1Fh ; 3.1ms 1587rpm
retlw 1Eh ; 3ms 1601rpm
retlw 1Eh ; 3ms 1616rpm
retlw 1Eh ; 3ms 1631rpm
retlw 1Dh ; 2.9ms 1646rpm
retlw 1Dh ; 2.9ms 1661rpm
retlw 1Dh ; 2.9ms 1677rpm
retlw 1Ch ; 2.8ms 1692rpm
retlw 1Ch ; 2.8ms 1708rpm
retlw 1Ch ; 2.8ms 1724rpm
retlw 1Bh ; 2.7ms 1741rpm
retlw 1Bh ; 2.7ms 1758rpm
retlw 1Bh ; 2.7ms 1775rpm
retlw 1Ah ; 2.6ms 1792rpm
retlw 1Ah ; 2.6ms 1809rpm
retlw 1Ah ; 2.6ms 1827rpm
retlw 19h ; 2.5ms 1846rpm
retlw 19h ; 2.5ms 1864rpm
retlw 19h ; 2.5ms 1883rpm
retlw 18h ; 2.4ms 1902rpm
retlw 18h ; 2.4ms 1922rpm
retlw 17h ; 2.3ms 1942rpm
retlw 17h ; 2.3ms 1962rpm
retlw 17h ; 2.3ms 1983rpm
retlw 16h ; 2.2ms 2004rpm
retlw 16h ; 2.2ms 2026rpm
retlw 15h ; 2.1ms 2048rpm
retlw 15h ; 2.1ms 2070rpm
retlw 15h ; 2.1ms 2093rpm
retlw 15h ; 2.1ms 2116rpm
retlw 14h ; 2ms 2140rpm
retlw 14h ; 2ms 2165rpm
retlw 14h ; 2ms 2190rpm
retlw 14h ; 2ms 2215rpm
retlw 14h ; 2ms 2241rpm
retlw 13h ; 1.9ms 2268rpm
retlw 13h ; 1.9ms 2295rpm
retlw 13h ; 1.9ms 2323rpm
retlw 12h ; 1.8ms 2351rpm
retlw 12h ; 1.8ms 2381rpm
retlw 12h ; 1.8ms 2411rpm
retlw 12h ; 1.8ms 2441rpm
retlw 11h ; 1.7ms 2473rpm
retlw 11h ; 1.7ms 2505rpm
retlw 11h ; 1.7ms 2538rpm
retlw 11h ; 1.7ms 2572rpm
retlw 10h ; 1.6ms 2606rpm
retlw 10h ; 1.6ms 2642rpm
retlw 10h ; 1.6ms 2679rpm
retlw 0Fh ; 1.5ms 2716rpm
retlw 0Fh ; 1.5ms 2755rpm
retlw 0Eh ; 1.4ms 2795rpm
retlw 0Eh ; 1.4ms 2836rpm
retlw 0Eh ; 1.4ms 2878rpm
retlw 0Dh ; 1.3ms 2921rpm
retlw 0Dh ; 1.3ms 2965rpm
retlw 0Dh ; 1.3ms 3011rpm
retlw 0Ch ; 1.2ms 3059rpm
retlw 0Ch ; 1.2ms 3107rpm
retlw 0Ch ; 1.2ms 3158rpm
retlw 0Bh ; 1.1ms 3210rpm
retlw 0Bh ; 1.1ms 3263rpm
retlw 0Bh ; 1.1ms 3319rpm
retlw 0Ah ; 1ms 3376rpm
retlw 0Ah ; 1ms 3435rpm
retlw 0Ah ; 1ms 3496rpm
retlw 0Ah ; 1ms 3560rpm
retlw 9h ; 0.9ms 3626rpm
retlw 9h ; 0.9ms 3694rpm
retlw 9h ; 0.9ms 3765rpm
retlw 8h ; 0.8ms 3838rpm
retlw 8h ; 0.8ms 3914rpm
retlw 8h ; 0.8ms 3994rpm
retlw 7h ; 0.7ms 4077rpm
retlw 7h ; 0.7ms 4163rpm
retlw 7h ; 0.7ms 4262rpm
retlw 6h ; 0.6ms 4346rpm
retlw 6h ; 0.6ms 4444rpm
retlw 5h ; 0.5ms 4546rpm
retlw 5h ; 0.5ms 4653rpm
retlw 5h ; 0.5ms 4765rpm
retlw 5h ; 0.5ms 4883rpm
retlw 4h ; 0.4ms 5006rpm
retlw 4h ; 0.4ms 5136rpm
retlw 4h ; 0.4ms 5273rpm
retlw 3h ; 0.3ms 5417rpm
retlw 3h ; 0.3ms 5569rpm
retlw 3h ; 0.3ms 5729rpm
retlw 2h ; 0.2ms 5899rpm
retlw 2h ; 0.2ms 6080rpm
retlw 2h ; 0.2ms 6272rpm
retlw 2h ; 0.2ms 6476rpm
retlw 2h ; 0.2ms 6693rpm
retlw 2h ; 0.2ms 6926rpm
retlw 1h ; 0.1ms 7176rpm
retlw 1h ; 0.1ms 7443rpm
retlw 1h ; 0.1ms 7732rpm
retlw 1h ; 0.1ms 8044rpm
retlw 1h ; 0.1ms 8381rpm
retlw 1h ; 0.1ms 8748rpm
retlw 1h ; 0.1ms 9149rpm
retlw 1h ; 0.1ms 9587rpm
retlw 1h ; 0.1ms 10070rpm
retlw 0h ; 0ms 10604rpm
retlw 0h ; 0ms 11196rpm
retlw 0h ; 0ms 11859rpm
retlw 0h ; 0ms 12605rpm
retlw 0h ; 0ms 13451rpm
retlw 0h ; 0ms 14418rpm
retlw 0h ; 0ms 15534rpm



; *********** END OF YOUR OWN VALUES ******************************

retlw 8h ; in case of overlap



org 385h ; if the program is loose,
;
;
;
goto start ; It goes back home.
;
;
;===================JMJ================================
;Test routine, sends ignition pulses to the thyristor at 4hz/140hz,
;selectable by rotor input.
testdelay
btfsc test ; checks the jumper to disconnect test mode
goto start
bsf rpmmax
bcf led

btfss rotor ; checks hall device. slow test if low, fast test if high
goto slowtest
goto fasttest

slowtest
bsf led
; Delay = 0.005 seconds
; Clock frequency = 4 MHz
;4998 cycles
movlw 0xE7
movwf d1
movlw 0x04
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
goto $+1
goto trigger ; triggers the thyristor
goto testdelay


fasttest
bsf led
; Delay = 0.3 seconds
; Clock frequency = 4 MHz
;299998 cycles
movlw 0x5F
movwf d1
movlw 0xEB
movwf d2
Delay_1
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_1
goto $+1
goto trigger ; triggers the thyristor
goto testdelay

trigger
bsf coil ; set output
bcf revcoil ; set reverse output
; Delay = 0.001 seconds
; Clock frequency = 4 MHz
movlw 0xC7
movwf d1
movlw 0x01
movwf d2
Delay_3
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_3

;2 cycles
goto $+1

bcf coil
bsf revcoil
goto testdelay
;
;=============================End JMJ=============================
end
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Dj_smart, накажу:). Это ассемблер, а не Си.
И исходник нерабочий к тому же.
  Не в тему:   так что как проснёшься, можешь эти сообщения поудалять :)
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Это ассемблер, а не Си.
А теперь? :company:
Исходник рабочий на 100. MPASMWIN.exe компилит его на раз. Но когда я лезу и меняю что-то... Короче ума не хватает:).
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Странно.
Смотри сам...
Самое начало...
movlw 0x14
subwf rpmhi,W
btfsc STATUS,Z ; rpmhi - 14 = 0 ?
goto start ; yes
Команда перехода на метку "start".
А где в тексте программы есть такая метка?
Я не нашёл.
И описания переменных не нашёл.
И компилятор 154 ошибки выдаёт.
Может ты какой-нибудь файлик притихарил?;)
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

koolhatcker, действительно странно. Сам скопировал, и при попытке скомпилировать... чуть ли не матом:(. Вот архивом, там исходник и чем компилил. Может форум чего обрезал, или добавил...
Скачать файл "moy.rar" с файлообменника cncfiles.su (195.9 кб)
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Выслал переделанный и откомпилированный в почту.
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Ответить