mirror of
https://github.com/eddyem/scorpio.git
synced 2025-12-06 10:45:15 +03:00
96 lines
2.7 KiB
C
96 lines
2.7 KiB
C
/*
|
|
* geany_encoding=koi8-r
|
|
* main.c
|
|
*
|
|
* Copyright 2017 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
* MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#include "includes.h"
|
|
|
|
volatile uint16_t Milliseconds = 0, Seconds = 0, days = 0;
|
|
volatile uint8_t tick_ctr = 0, hours = 0;
|
|
|
|
|
|
void print_time(){
|
|
printUint((uint8_t*)&days, 2);
|
|
usart_send("d");
|
|
printUint((uint8_t*)&hours, 1);
|
|
usart_send("h");
|
|
printUint((uint8_t*)&Seconds, 2);
|
|
usart_send("s");
|
|
printUint((uint8_t*)&Milliseconds, 2);
|
|
usart_send("ms\n");
|
|
}
|
|
|
|
int main() {
|
|
DDRC = 0xff; // steppers diagram & stepper select
|
|
DDRB = 0x07; // PB0..PB2 - pol/caret management etc
|
|
STPRS_OFF(); // turn off steppers before configuring to output
|
|
PORTB |= _BV(1);
|
|
|
|
/** USART config **/
|
|
// set baudrate
|
|
UCSRA = 0;
|
|
UCSRC = _BV(UCSZ1) | _BV(UCSZ0); // 8-bit data
|
|
UCSRB = _BV(RXEN) | _BV(TXEN) | _BV(RXCIE); // Enable RX and TX, enable RX interrupt
|
|
UBRRH = 0; // 9600
|
|
UBRRL = 51;
|
|
|
|
/** setup timer 0 - system timer **/
|
|
// set prescaler to 8 and start the timer (1MHz*256 = 0.256ms period)
|
|
TCCR0 |= _BV(CS01);
|
|
TIMSK |= _BV(TOIE0);
|
|
|
|
stepper_setup();
|
|
|
|
sei(); // enable interrupts
|
|
|
|
wdt_enable(WDTO_2S); // start watchdog
|
|
#ifdef EBUG
|
|
usart_send("Scorpio module1 ready\n");
|
|
#endif
|
|
while(1){
|
|
wdt_reset();
|
|
if(stepper_pulse) stepper_process();
|
|
if(usart_flags & U_RX_COMPLETE)
|
|
process_string();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
uint8_t LEDs[3] = {20,20,20}; // LEDs shining time
|
|
|
|
ISR(TIMER0_OVF_vect){
|
|
//static uint8_t shi_counter = 0;
|
|
TCNT0 += 6; // -> 0.250ms period
|
|
if(++tick_ctr == 4){
|
|
tick_ctr = 0;
|
|
if(++Milliseconds == 1000){
|
|
Milliseconds = 0;
|
|
if(++Seconds == 3600){
|
|
Seconds = 0;
|
|
if(++hours == 24){
|
|
hours = 0;
|
|
++days;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|