Чт авг 17, 2017 12:38:24
Пн авг 28, 2017 17:52:59
Вт авг 29, 2017 17:34:52
dm211 писал(а):Читал, что можно постранично писать в память, а как это сделать?
Ср авг 30, 2017 12:33:13
Ср авг 30, 2017 12:45:19
Ср авг 30, 2017 15:33:25
Ср авг 30, 2017 16:14:57
Ср авг 30, 2017 17:01:29
void eeprom_write_page(unsigned char address, unsigned char data){ // Постраничная запись
unsigned char y;
i2c_start(); // Кидаем команду "Cтарт" на шину I2C
i2c_write(Ext_EEPROM_Adr); // Кидаем на шину адрес 24LC256
i2c_write(address>>8); // Старший байт адреса
i2c_write(address); // младший байт адреса
for(y=0; y<64; y++){ // Посылаем 64 байта
i2c_write(data);} // Посылаем байт для записи
i2c_stop(); // Посылаем команду "Стоп"
}
// Стереть всё
void clear_all(){
unsigned int x;
for(x=0; x<500; x++){
eeprom_write_page(x, 0xFF);
}
}
Ср авг 30, 2017 17:22:17
Чт сен 07, 2017 12:11:57
Пт сен 08, 2017 18:16:22
Вс сен 10, 2017 14:26:26
Но прерывание по захвату работает с ножки ICP, а тут счетный вход Т1. Остается вариант в цикле смотреть ногу, запускать таймер и смотреть длительность.Ivanoff-iv писал(а):прерывание по захвату
Пн сен 11, 2017 15:45:58
Сб сен 23, 2017 08:35:41
Chip type : ATtiny13A
AVR Core Clock frequency: 1,200000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*******************************************************/
#include <tiny13a.h>
#include <delay.h>
#define S1 PINB.3
#define S2 PINB.4
#define HL1 PORTB.2
#define HL2 PORTB.1
#define OFF 1
#define ON 0
#define HOLD 200 // время равно: секунда * 100
unsigned char counter1;
unsigned char counter2;
unsigned char trigger;
unsigned char blink;
void main(void)
{
DDRB= (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB5)| (1<<PORTB4)| (1<<PORTB3)| (0<<PORTB2)| (0<<PORTB1)| (0<<PORTB0);
ACSR=(1<<ACD);
// Watchdog Timer Prescaler: OSC/64k
#pragma optsize-
WDTCR=(0<<WDTIF) | (0<<WDTIE) | (0<<WDP3) | (1<<WDCE) | (1<<WDE) | (1<<WDP2) | (0<<WDP1) | (1<<WDP0);
WDTCR=(0<<WDTIF) | (0<<WDTIE) | (0<<WDP3) | (0<<WDCE) | (1<<WDE) | (1<<WDP2) | (0<<WDP1) | (1<<WDP0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
while (1)
{
if(S1==OFF&&S2==OFF&&HL1==0&&trigger==0)
{
MCUCR=(1<<SE)|(1<<SM1);
#asm("sleep") // засыпаем
}
if(S1==ON&&HL1==0)
{
if(counter1=200)counter1++;
else HL1=1;
}
if(S1==OFF)counter1=0;
if(S1==ON&&HL1==1&&counter1==0)HL1=0;
if(S2==ON&&trigger==0)
{
if(counter2<200)counter2++;
else trigger=1;
}
if(S2==OFF)counter2=0;
if(S2==ON&&trigger==1&&counter2==0)trigger=0;
if(trigger)
{
if(blink<40)blink++;
else blink=0;
if(blink<20)HL2=1;
else HL2=0;
}
else
{
blink=0;
HL2=0;
}
#asm("wdr")
delay_ms(10);
}
}
Вс сен 24, 2017 18:46:53
if(!PINC.0){ // если нога упала
TCCR0=0x03; // включаем таймер
while(!PINC.0); // ждем,когда нога поднимется
tik=TCNT0; // счетчик передаем переменной
TCCR0=0x00; TCNT0=0; // обнуляем ,выкл.таймер
lcd_gotoxy(1,0);
sprintf(lcd_buffer," %i ",tik); // показать на индикаторе значение длит.
lcd_puts(lcd_buffer);
}
Пн сен 25, 2017 20:25:11
Пн сен 25, 2017 21:23:52
Вт сен 26, 2017 09:45:37
Сб сен 30, 2017 18:35:54
#include <mega8.h>
#include <delay.h>
#include <i2c.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=4
.equ __scl_bit=5
#endasm
#define PCF8574_BUS_ADDRESS 0x40
/* write a byte to the PCF8574 */
void PCF8574_write(unsigned char data) {
i2c_start();
i2c_write(PCF8574_BUS_ADDRESS);
i2c_write(data);
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(10);
}
void main(void) {
/* initialize the I2C bus */
i2c_init();
while (1)
{
PCF8574_write(0xFF);
delay_ms(500);
PCF8574_write(0x00);
delay_ms(500);
};
}
Сб сен 30, 2017 20:33:13