attiny2313 и таймер

Обсуждаем контроллеры компании Atmel.
Ответить
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

Приветствую всех хвостатых!!! Есть вот у меня код таймера, который нормально исправно работает, но не работает кнопка стоп! То есть задать минуты, секунды и дать старт отсчета могу, а вот остановить не могу. Помогите допилить код, т.к. я больше по ассемблеру.

Изображение
Спойлер

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

#include <90s2313.h>    
#asm
   .equ __lcd_port=0x18		
#endasm
#include <lcd.h>         	//LCD control library
#include <delay.h> 		//Delay control library
#define MinUp PIND.0		//Button PIND0  Increases minutes
#define MinDown PIND.1		//Button PIND1  Decreases minutes
#define SecUp PIND.4		//Button PIND4  Increases seconds
#define SecDown PIND.5		//Button PIND4  Decreases seconds 
#define Rellay_On PORTD.6=1     //Relay on by sending "1" to PIND6
#define Rellay_Off PORTD.6=0 	//Relay off by sending "0" to PIND6 
#define Start PIND.3		//Start Button
#define Stop PIND.2		//Stop/Clear Button
typedef unsigned char byte;
// Declare your global variables here  
unsigned char temp1, temp2, temp3,temp4, temp5, temp6, laikas, end_check;
char h1, h0, m1, m0, s1, s0, p2,p1,p0; 
char IsStart, IsStop, IsClear; 
unsigned int pp,pp1;
//unsigned int total_secs; 
//float BarStep, Bar; 
//Define LCD simbol
flash byte kaire[8]={
0b1000000,
0b0100000,
0b0010000,
0b0001000,
0b0000100,
0b0000010,
0b0000001,
0b0000000
};   
//Symbol addressses for rotation effect
flash byte sleshai[8]={
0b00000000,
0b01111100,
0b00101111,
0b10110000,
0b00000000,
0b01111100,
0b00101111,
0b10110000
};   
//Send simbol to LCD CGRAM
void define_char(byte flash *pc,byte char_code){
	byte i,a;
	a=(char_code<<3)|0x40;
	for (i=0; i<8; i++) 
		lcd_write_byte(a++,*pc++);
}
//Funscion displays time on LCD at (9,1) position
void disp_time(void){
        lcd_gotoxy(8,1);
        lcd_putchar(h1|0x30); 
        lcd_gotoxy(9,1);
        lcd_putchar(h0|0x30);
        lcd_gotoxy(10,1);
        lcd_putchar(0x3A);
        lcd_gotoxy(11,1);
        lcd_putchar(m1|0x30);   
        lcd_gotoxy(12,1);
        lcd_putchar(m0|0x30); 
        lcd_gotoxy(13,1);
        lcd_putchar(0x3A); 
        lcd_gotoxy(14,1);
        lcd_putchar(s1|0x30);
        lcd_gotoxy(15,1);
        lcd_putchar(s0|0x30);  
}     
//Setting time function  (max 60 min ir 60 sec)         
void peep(unsigned int koef)
{               
DDRB.3=1;                     
PORTB.3=0;   
temp2=0;
while (temp2<=50)
	{
	for(pp=1;pp<koef;pp++){}
	PORTB.3=1;
	delay_us(100);
	temp2++;
	PORTB.3=0;  
	delay_us(100);
	}                
		

}            
void settime (void)
{     

while((IsStart&1)!=1) // Program loop
	{ 

       //	lcd_clear(); 
       	 //	delay_ms(15);
        lcd_gotoxy(0,0);
       	lcd_putsf("Time delay     ");
	disp_time();
        PORTD.0=1; 
      	PORTD.1=1;  
       	PORTD.2=1;  
	    PORTD.3=1;
      	PORTD.4=1;
      	PORTD.5=1;
      	
      	DDRD.0=0;
	    DDRD.1=0;  
	    DDRD.3=0; 
	    DDRD.2=0;
   	    DDRD.4=0;
    	DDRD.5=0;
     	temp6++; 	// small delay
	//check if MinUp button is pressed
	if ((MinUp&1)!=1)
		{  
	       //	delay_ms(25);
		// Increment minutes
	        if  (m0!=9) {m0++;}
                        else   if  (m1!=5) {m1++; m0=0;}
                        	else {m0=0; m1=0;} 
                        	
         	//Buzzer
         	peep(8);
		// Wait for button release
		while ((MinUp&1)==0){} 
		}   
        //check if MinDown button is pressed 
       	if ((MinDown&1)!=1)
		{       
		//Dekrement Minutes
		if  (m0!=0) {m0--;}
                        else   if  (m1!=0) {m1--; m0=9;}
                        	else {m0=9; m1=5;}
		// Wait for button release
	         peep(6);
		while ((MinDown&1)==0){} 
		} 
        //  
	temp6--;   
	//check if SecUp button is pressed 
       	if ((SecUp&1)!=1)
		{           
		  if (s0!=9) {s0++;}
        		else if (s1!=5) {s1++; s0=0;}
        			else {s0=0; s1=0;}
                // Wait for button release
		peep(4);
       		while ((SecUp&1)==0){} 
		}       
	//check if SecDown button is pressed 
       	if ((SecDown&1)!=1)
		{  
		//Dekrement Seconds
		if (s0!=0) {s0--;}
        		else if (s1!=0) {s1--; s0=9;}
        			else {s0=9; s1=5;}
                // Wait for button release  
       		peep(2);
       		while ((SecDown&1)==0){} 
		}   
       	if ((Start)!=1)
		{
		IsStart=1;  
		peep(8);
		peep(8);
		peep(8);
		peep(8);
		delay_ms(10);
		peep(6); 
		peep(6);
		peep(6);
		delay_ms(8);
		peep(4);    
		peep(4);
		delay_ms(5);
		peep(2);
		while ((Start)==0){}
		}   
	}

}   

void main(void)   //Main program
{  
for (pp1=1;pp1<50;pp1++)
{
peep(5);

}
PORTB=0x00;
DDRB=0xFF;

PORTD=0x00;
DDRD=0x7F;

// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;


// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
  
//Initial values   
temp1=0;
temp3=0; 
temp4=0;
temp5=0; 
temp6=0;
laikas=0; 
IsStart=0;
IsStop=0;
IsClear=0;  
                   
//Initial time values
h1=0;//Leave always 0
h0=0;//Leave always 0 
m1=0;
m0=0;
s1=0;
s0=0;    

// LCD module initialization   
lcd_init(16);  
Rellay_Off;
//define custom char on LCD CGRAM
define_char(kaire,0);
delay_ms(2000); //1 second
lcd_clear();   
//lcd_putchar(0); 
//Time input
settime();    
lcd_gotoxy(0,0);  
DDRD.6=1;  
Rellay_On;//Start relay and start coundown   
DDRD.2=0;
DDRD.3=0;
PORTD.2=1;
PORTD.3=1;    

while (!end_check)//
	{ 
	    	      
//Char animation on LCD ********************
		lcd_gotoxy(0,1);
		delay_ms(1000);
		lcd_putchar(sleshai[temp3]);  
		temp3++;
		if (temp3==8) temp3=0;    
    
	       	 	 if (temp1==0)
	       	 	 	{
	       	 	 	lcd_gotoxy(0,0);
	       	 	 	lcd_putsf("!!!!!Warning!!!!");
	       	 	 	temp1++;
	       	 	 	}                   
	       	 	 else if (temp1==1)
	       	 	 	{
	       	 	 	lcd_gotoxy(0,0);
	       	 	 	lcd_putsf("!!!!Exposure!!!!");
	       	 	 	temp1=0;
	       	 	 	}                               
//Time countdown*******************
       if (s0!=0) {s0--; end_check=0;}
        else if (s1!=0) {s1--; s0=9; end_check=0;}
                else if  (m0!=0) {m0--; s1=5;s0=9;end_check=0;}
                        else   if  (m1!=0) {m1--; m0=9;s1=5;s0=9;end_check=0;}
                                else   end_check=1;
                
                
//Exposure over***************
                if  (!end_check) disp_time();
                        else {lcd_gotoxy(0,0); lcd_putsf("****Finished!***"); Rellay_Off; break;}//Stop relay
	}

while (1)
      {
      // Place your code here
      lcd_clear(); 
      delay_ms(500); 
      peep(15); 
      peep(15);
      peep(15);
      peep(15);
      peep(15);   
      peep(15); 
      peep(15);
      peep(15);
      lcd_gotoxy(0,0); 
      lcd_putsf("****Finished!***");
      delay_ms(500);
      peep(10); 
      peep(10); 
      peep(10); 
      peep(10); 
      peep(10); 
      peep(10); 
      peep(10);
      
      };
}
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Фига се, код выложил.. Хотя б подпилил и выкинул кусок, который не работает.. А че на ассемблере не зафигачил, раз в нем сечешь?
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

ИС-пытатель писал(а):Фига се, код выложил.. Хотя б подпилил и выкинул кусок, который не работает.. А че на ассемблере не зафигачил, раз в нем сечешь?
в том то и дело что того куска кода, который отвечает за остановку времени отсутствует.
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Да видимо его знания ассемблера ограничиваются mov ax, dx
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

Dr. Alex писал(а):Да видимо его знания ассемблера ограничиваются mov ax, dx
уважаемый давай те умничать не будем
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Так вставьте кусок кода, описывающий вашу кнопку как ассемблерную вставку.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Давай так. Напишешь на ассемблере то, что хочешь поиметь (или хотя бы словесно алгоритм), а я переведу тебе на СИ. И сам пихнешь куда захочешь. очень уж не хочется твой код ковырять.
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Сообщение takei »

slyberkut приложите файл с проектом полностью или хотя бы протеус , попробую доработать.
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

takei писал(а):slyberkut приложите файл с проектом полностью или хотя бы протеус , попробую доработать.
Проект codevision. Там просто надо добавить возможность остановки и сброса таймера по кнопке
Вложения
2313lcd.rar
(45.44 КБ) 199 скачиваний
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Я думаю, что если аффтор все это сам написал, что выше, то он бы без труда всунул такой код.. Признавайтесь, где слизали?
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Сообщение takei »

Я так понял оригинал это http://www.dreifas.net/uv-80
Нашел место где нужно сделать изменения.
Автор все написал в исходнике
/ * Здесь Вы можете остановить запись время, нажав STOP.
          Время приостановлено и отключена от того же преобразователя.
          Нажмите еще раз, чтобы остановить - завершает программу. При нажатии
          Начните, TIA включится реле и программа продолжает работать.
*/
/* if (Stop!=1)
Я бы попробовал если сделаете проект в протеусе
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

ИС-пытатель писал(а):Я думаю, что если аффтор все это сам написал, что выше, то он бы без труда всунул такой код.. Признавайтесь, где слизали?
исходник конечно слизанный!!! Понятное дело если бы я сам написал то сам бы и решил проблему!
takei писал(а):Я так понял оригинал это http://www.dreifas.net/uv-80
Нашел место где нужно сделать изменения.
Автор все написал в исходнике
/ * Здесь Вы можете остановить запись время, нажав STOP.
          Время приостановлено и отключена от того же преобразователя.
          Нажмите еще раз, чтобы остановить - завершает программу. При нажатии
          Начните, TIA включится реле и программа продолжает работать.
*/
/* if (Stop!=1)
Я бы попробовал если сделаете проект в протеусе
Все верно оригинал от туда! Эм я что то понять не могу где изменения надо сделать
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Сообщение takei »

slyberkut писал(а):я что то понять не могу где изменения надо сделать
Так в исходнике эта часть кода закомментирована, ... раскомментировать и перекомпилировать в новую прошивку, (и все наверное :) )
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

takei писал(а):
slyberkut писал(а):я что то понять не могу где изменения надо сделать
Так в исходнике эта часть кода закомментирована, ... раскомментировать и перекомпилировать в новую прошивку, (и все наверное :) )

все спасибо помогло! а я как то на этот файл и внимания не обращал
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Сообщение takei »

slyberkut писал(а): помогло!
slyberkut я так понял вы в железе пробуете эту схему, скажите какие звуковые сигналы выдает эта схема?
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

какие звуковые сигналы выдает эта схема?
:shock: А чем она их выдает? Релюшкой что ли щелкает?
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Сообщение takei »

ИС-пытатель писал(а): :shock: А чем она их выдает?
Так в этом и вопрос , остался один порт-3 "жокер"
на который есть несколько указаний в исходнике, например это

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

//Funkcija nustatanti laika -mintes ir sekundes (max 60 min ir 60 sec)          
void peep(unsigned int koef)
{               
DDRB.3=1;                     
PORTB.3=0;   
temp2=0;
while (temp2<=50)
     {
     for(pp=1;pp<koef;pp++){}
     PORTB.3=1;
     delay_us(100);
     temp2++;
     PORTB.3=0;  
     delay_us(100);
     }     
вот и спросил, так как это похоже на звуковую метку.
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

takei писал(а):
ИС-пытатель писал(а): :shock: А чем она их выдает?
Так в этом и вопрос , остался один порт-3 "жокер"
на который есть несколько указаний в исходнике, например это

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

//Funkcija nustatanti laika -mintes ir sekundes (max 60 min ir 60 sec)          
void peep(unsigned int koef)
{               
DDRB.3=1;                     
PORTB.3=0;   
temp2=0;
while (temp2<=50)
     {
     for(pp=1;pp<koef;pp++){}
     PORTB.3=1;
     delay_us(100);
     temp2++;
     PORTB.3=0;  
     delay_us(100);
     }     
вот и спросил, так как это похоже на звуковую метку.
да все верно на железе! кстати да про бузер с коде упоминается, но вот его не подключал, если интересно завтра вечером могу попробовать или же если есть портеус то можете сами попробовать
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

Сообщение takei »

slyberkut писал(а): если интересно завтра вечером могу попробовать или же если есть портеус то можете сами попробовать
Конечно интересно. А в протеусе думаю что звук будет сильно отличатся от оригинала.
Мучитель микросхем
Аватара пользователя
Сообщения: 403
Зарегистрирован: Пн фев 11, 2008 20:14:38
Откуда: Москва

Сообщение slyberkut »

takei писал(а):
slyberkut писал(а): если интересно завтра вечером могу попробовать или же если есть портеус то можете сами попробовать
Конечно интересно. А в протеусе думаю что звук будет сильно отличатся от оригинала.
повесил бузер! я даже и не подозревал что у него такая фишка есть!!! 4 тона сигнала по кнопкам секунд +/- и минут +/-, а так же двух тональный сигнал на финише
Плюс - минус = заряд, фаза - ноль = ???
Контактная информация:
Ответить

Вернуться в «AVR»