Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 161 → Rev 162

/roboti/solarni/2006/jumpk/menic.BAK
0,0 → 1,7
#include <16F88.h>
 
#device adc=8
#fuses WDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, \
NODEBUG, NOPROTECT, NOFCMEN, NOIESO, CCPB3
#use delay(clock=4000000, RESTART_WDT)
 
/roboti/solarni/2006/jumpk/menic.HEX
0,0 → 1,44
:1000000000308A005F280000FF00030E8301A1007A
:100010007F08A0000A08A8008A01A00E0408A20018
:100020007708A3007808A4007908A5007A08A6003C
:100030007B08A700831383128C308400801D222844
:100040008C193528220884002308F7002408F800BA
:100050002508F9002608FA002708FB0028088A006E
:10006000210E8300FF0E7F0E09008A1143280A101B
:100070008A100A118207023406340E341E343E34CC
:100080007E34FE34FF34290893008C118A11222813
:100090002F308400000803195E280130F800BF30BB
:1000A000F7006400F70B5128F80B4F284A30F7008F
:1000B000F70B582800006400800B4D2800348401A1
:1000C0001F308305603083168F001F129F121B089C
:1000D00080399B0007309C000108C03981000E3038
:1000E000F700073083128101813084000008F03965
:1000F0000738800064000008F739F719F0397704F1
:10010000800083161F129F121B088039D2389B0073
:100110001F1383121F179F1783169F1383121F1419
:10012000941283160611861406120030831294006E
:100130008316940083129001073083169C000508F3
:1001400064000230F700F70BA328000000001C0831
:1001500083120D1383169D01861183128611831657
:100160000611831206118316861083128610203022
:10017000F8001F08C73978049F009501831686117F
:10018000831286110C3097000030F800043892007A
:1001900064308316920062308F0002308312950023
:1001A00083168610831286106430AF0048208316B1
:1001B0008610831286141430AF0048201F151F19B3
:1001C000DF281E08783C031CD02883168610831273
:1001D00086100830F8001F08C73978049F006400B3
:1001E0002030F700F70BF228000000001F151F1940
:1001F000F7281E08F7000310F70C7708283EAC001C
:1002000095010030F800043892002C088316920003
:100210001430831295003230AE00FA30AF0048201F
:10022000AE0B0D2983169401223083129400023004
:10023000A90029089300C0308B0483168C15831203
:10024000AA012A08073C031C2E292A083720F80097
:10025000A9003730AF004820AA0A2129831694014B
:100260008312940183168C110611831206150A302D
:10027000AE008230AF004820AE0B3929831606113C
:080280008312061142296300FC
:04400E003C2FFC3F08
:00000001FF
;PIC16F88
/roboti/solarni/2006/jumpk/menic.c
0,0 → 1,114
//----------------------------
// Sagitta - 9. 9. 2005
//----------------------------
 
#include ".\menic.h"
 
#define RAZENI 55 // Po kolika ms se bude menit rychlost pri rozjizdeni
#define REFSTART 120 // Hodnota komparatoru odpovidajici 1,7V pri
// nezatizenych solarnich clancich
#define DUTY1 2 // Delka sepnuti PWM v us pro sero
#define DUTY2 20 // Delka sepnuti PWM v us pro jednu zarovku 500W
 
// Tabulka napeti vuci referencni LED (cca 1,7V)
// hodnota prevodniku / napeti na clancich
// 250 1,6V
// 200 2,1V
// 150 2,8V
// 145 2,9V
// 120 3,6V
// 110 4,0V
 
#define MENIC PIN_B3 // Spinani tranzistoru menice
#define REFPWR PIN_B1 // Napajeni zdroje referencniho napeti
#define MOTOR PIN_B2 // Spinani tranzistoru motoru
 
#byte SSPBUF = 0x13 // Registry jednotky SSP
#byte SSPCON1 = 0x14
#byte SSPSTAT = 0x94
 
// Vzorky pro generovani PWM pomoci SSP
unsigned int8 const Pattern[8] = {0x02,0x06,0x0e,0x1e,0x3e,0x7e,0xfe,0xff};
unsigned int8 MotorPattern;
 
#INT_SSP
void IntSSP() // Vyvola se po odeslani znaku pres SSP
{
SSPBUF=MotorPattern; // znovu vysli stejnou hodnotu
}
 
void main()
{
int8 n;
int8 cekej;
int8 perioda;
int8 rozjezd;
 
// Inicializace casovacu a prevodniku
setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_1152MS);
setup_adc_ports(ADC_CLOCK_INTERNAL|sAN1|sAN4|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(FALSE);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
output_low(MENIC); // Vsechno zastav
output_low(MOTOR);
output_low(REFPWR);
 
set_adc_channel(4); // Vyber AD kanal pro pomerne mereni napeti
set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu
setup_ccp1(CCP_PWM); // PWM pro zatizeni clanku v seru
setup_timer_2(T2_DIV_BY_1,100,1); // perioda PWM
 
setup_oscillator(OSC_4MHZ|OSC_INTRC); // rozjed PIC (zvysi se odber)
 
// jsme v depu?
set_pwm1_duty(DUTY1); // delka sepnuti
do
{
output_low(REFPWR);
delay_ms(100);
output_high(REFPWR); // zapni napajeni napetove reference (LED)
delay_ms(20);
} while (read_adc()>REFSTART); // Odkryl starter clanky?
output_low(REFPWR);
 
// Precti trimr
set_adc_channel(1); // Zjisteni nastaveni trimru PWM
delay_us(100); // Pockej na prepnuti kanalu A/D prevodniku
perioda=(read_adc()>>1)+40; // rozsah: 40 az 167
set_pwm1_duty(0); // Zastav PWM, aby slo zmenit periodu
setup_timer_2(T2_DIV_BY_1,perioda,1); // Zapis nastavenou periodu
 
// nabíjíme
set_pwm1_duty(DUTY2); // delka sepnuti PWM
delay_ms(12500);
 
// rozjezd
SSPSTAT = 0; // inicializace SPI jednotky
SSPCON1 = 0x22; // SPI OSC/64
MotorPattern=Pattern[0];
SSPBUF=MotorPattern; // 1. data pro vyslani
enable_interrupts(global);
enable_interrupts(INT_SSP); // az budou vyslana, prijde preruseni
 
for(n=0; n<=7; n++) // razeni osmi rychlostnich stupnu
{
MotorPattern=Pattern[n];
delay_ms(RAZENI); // Pockej na dalsi razeni
};
SSPSTAT = 0;
SSPCON1 = 0; // SPI stop
disable_interrupts(INT_SSP); // zastav preruseni od SSP
 
// jedem co to da
output_high(MOTOR);
delay_ms(1300); // dyl jak 1,3s bysme nemeli jet :)
output_low(MOTOR); // zastav motor
// Menic je stale zapnut a zatezuje clanky
 
while(TRUE); // Cekej, dokud se neztrati svetlo,
// nebo prijde WatchDog
}
/roboti/solarni/2006/jumpk/menic.h
0,0 → 1,9
#include <16F88.h>
 
#device adc=8
 
#fuses WDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, \
NODEBUG, NOPROTECT, NOFCMEN, NOIESO, CCPB3
 
#use delay(clock=4000000, RESTART_WDT)