Skip to content
Snippets Groups Projects
Commit 6826f0a2 authored by Erik Strand's avatar Erik Strand
Browse files

WIP try to compile by removing Arduino

parent 3b8cb7ab
No related branches found
No related tags found
No related merge requests found
...@@ -13,23 +13,34 @@ ...@@ -13,23 +13,34 @@
MMCU=attiny44 MMCU=attiny44
F_CPU = 20000000 F_CPU = 20000000
CFLAGS=-mmcu=$(MMCU) -Wall -Os -DF_CPU=$(F_CPU) CFLAGS=-mmcu=$(MMCU) -Wall -Os -DF_CPU=$(F_CPU) \
-I external/OneWire \
-I /usr/share/arduino/hardware/arduino/cores/arduino
#PROGRAMMER = atmelice_isp #PROGRAMMER = atmelice_isp
PROGRAMMER = usbtiny PROGRAMMER = usbtiny
%.hex: %.out %.hex: %.elf
avr-objcopy -O ihex $< $@;\ avr-objcopy -O ihex $< $@;\
avr-size --mcu=$(MMCU) --format=avr $@ avr-size --mcu=$(MMCU) --format=avr $@
%.out: %.c #%.o: %.c
avr-gcc $(CFLAGS) -I./ -o $@ $< # avr-g++ $(CFLAGS) -I./ -o $@ $<
program_%: %.hex program_%: %.hex
avrdude -p t44 -P usb -c $(PROGRAMMER) -U flash:w:$< avrdude -p t44 -P usb -c $(PROGRAMMER) -U flash:w:$<
external/OneWire/OneWire.o: external/OneWire/OneWire.cpp external/OneWire/OneWire.h
avr-g++ -c $(CFLAGS) -I./ -o $@ $<
button_serial.o: button_serial.c external/OneWire/OneWire.h
avr-g++ -c $(CFLAGS) -I./ -o $@ $<
button_serial.elf: button_serial.o OneWire.o
avr-g++ $(CFLAGS) -o $@ $^
.PHONY: default .PHONY: default
default: program_button_serial #default: program_button_serial
default: button_serial.hex
program-fuses: program-fuses:
avrdude -p t44 -P usb -c $(PROGRAMMER) -U lfuse:w:0x5E:m avrdude -p t44 -P usb -c $(PROGRAMMER) -U lfuse:w:0x5E:m
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
#include <util/delay.h> #include <util/delay.h>
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "OneWire.h"
#define output(directions,pin) (directions |= pin) // set port direction for output #define output(directions,pin) (directions |= pin) // set port direction for output
#define set(port,pin) (port |= pin) // set port pin #define set(port,pin) (port |= pin) // set port pin
#define clear(port,pin) (port &= (~pin)) // clear port pin #define clear(port,pin) (port &= (~pin)) // clear port pin
...@@ -25,6 +27,7 @@ ...@@ -25,6 +27,7 @@
#define bit_delay() _delay_us(bit_delay_time) // RS232 bit delay #define bit_delay() _delay_us(bit_delay_time) // RS232 bit delay
#define half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay #define half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay
#define char_delay() _delay_ms(10) // char delay #define char_delay() _delay_ms(10) // char delay
#define delay(duration) _delay_ms(duration); // drop-in replacement for Arduino delay
#define serial_port PORTA #define serial_port PORTA
#define serial_direction DDRA #define serial_direction DDRA
...@@ -112,6 +115,112 @@ void put_string(volatile unsigned char *port, unsigned char pin, char *str) { ...@@ -112,6 +115,112 @@ void put_string(volatile unsigned char *port, unsigned char pin, char *str) {
} while (str[index] != 0); } while (str[index] != 0);
} }
OneWire ds(11); // on pin 10 (a 4.7K resistor is necessary)
//void setup(void) {
// Serial.begin(9600);
//}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
put_string(&serial_port, serial_pin_out, "No more addresses.");
ds.reset_search();
delay(250);
return;
}
//Serial.print("ROM =");
put_string(&serial_port, serial_pin_out, "ROM=");
for( i = 0; i < 8; i++) {
put_char(&serial_port, serial_pin_out, ' ');
//Serial.print(addr[i], HEX);
put_string(&serial_port, serial_pin_out, "xxx");
//put_string(&serial_port, serial_pin_out, addr[i])
}
if (OneWire::crc8(addr, 7) != addr[7]) {
put_string(&serial_port, serial_pin_out, "CRC is not valid!");
return;
}
//Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
put_string(&serial_port, serial_pin_out, " Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
put_string(&serial_port, serial_pin_out, " Chip = DS18B20");
type_s = 0;
break;
case 0x22:
put_string(&serial_port, serial_pin_out, " Chip = DS1822");
type_s = 0;
break;
default:
put_string(&serial_port, serial_pin_out, "Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
put_string(&serial_port, serial_pin_out, " Data = ");
put_string(&serial_port, serial_pin_out, "xxx");
//put_string(&serial_port, serial_pin_out, present, HEX);
put_string(&serial_port, serial_pin_out, " ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
//Serial.print(data[i], HEX);
put_string(&serial_port, serial_pin_out, " thing");
}
put_string(&serial_port, serial_pin_out, " CRC=");
//put_string(&serial_port, serial_pin_out, OneWire::crc8(data, 8), HEX);
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
put_string(&serial_port, serial_pin_out, " Temperature = ");
//put_string(&serial_port, serial_pin_out, celsius);
put_string(&serial_port, serial_pin_out, " Celsius, ");
//put_string(&serial_port, serial_pin_out, fahrenheit);
put_string(&serial_port, serial_pin_out, " Fahrenheit");
}
int main(void) { int main(void) {
// Set clock divider to 1. // Set clock divider to 1.
CLKPR = (1 << CLKPCE); CLKPR = (1 << CLKPCE);
...@@ -135,12 +244,12 @@ int main(void) { ...@@ -135,12 +244,12 @@ int main(void) {
if (PINA & button_pin) { if (PINA & button_pin) {
// Turn off the LED. // Turn off the LED.
PORTB &= ~led_pin; PORTB &= ~led_pin;
put_char(&serial_port, serial_pin_out, '0'); //put_char(&serial_port, serial_pin_out, '0');
} else { } else {
PORTB |= led_pin; PORTB |= led_pin;
put_char(&serial_port, serial_pin_out, '1'); //put_char(&serial_port, serial_pin_out, '1');
} }
_delay_us(10000); //_delay_us(10000);
loop();
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment