20131110-181004

This commit is contained in:
BlubbFish 2013-11-10 17:10:02 +00:00
parent 63e462ea63
commit b275a520fa
13 changed files with 240 additions and 101 deletions

Binary file not shown.

View File

@ -6,19 +6,13 @@
*/
#include "config.h"
#include <avr/io.h>
#include <util/delay.h>
#include "mcp2515_defs.h"
#include "Led.h"
#include "Spi.h"
#ifndef CAN_H_
#define CAN_H_
//#define DDR_CS DDRB
//#define PORT_CS PORTB
//#define P_CS 2
typedef struct
{
uint16_t id;

View File

@ -1,27 +1,26 @@
Can.d Can.o: .././Can.cpp .././Can.h .././config.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h \
.././mcp2515_defs.h .././Spi.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h \
.././mcp2515_defs.h .././Led.h .././Spi.h
.././pin.hpp .././portb.hpp
.././Can.h:
.././config.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h:
@ -29,6 +28,18 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h:
.././mcp2515_defs.h:
.././Spi.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/iom32u2.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/portpins.h:
@ -41,14 +52,6 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h:
.././pin.hpp:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h:
.././mcp2515_defs.h:
.././Led.h:
.././Spi.h:
.././portb.hpp:

View File

@ -1,4 +1,4 @@
Led.d Led.o: .././Led.cpp .././Led.h \
Led.d Led.o: .././Led.cpp .././Led.h .././portc.hpp \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \
@ -9,10 +9,13 @@ Led.d Led.o: .././Led.cpp .././Led.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \
.././pin.hpp
.././Led.h:
.././portc.hpp:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h:
@ -34,3 +37,5 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h:
.././pin.hpp:

View File

@ -1,49 +1,41 @@
/*
* CPPFile1.cpp
* Led.cpp
*
* Created: 03.11.2013 17:24:58
* Author: netz
*/
#include "Led.h"
#define LEDPORT PORTB
#define LEDDDR DDRB
#define LEDPINR PINC5
#define LEDPING PINC6
#define LEDPINB PINC7
#define LEDPINM PINC5
Led::Led() {
/*Led::Led() {
init();
}
}*/
void Led::init() {
LEDDDR |= (1<<LEDPINR) | (1<<LEDPING) | (1<<LEDPINB);
}
/*void Led::init() {
red::make_output();
green::make_output();
blue::make_output();
}*/
void Led::uninit() {
}
/*void Led::uninit() {
}*/
void Led::color(uint8_t mask) {
int rgb = 0;
rgb |= (mask & (1<<0)) ? (1<<0) : (0<<0);
rgb |= (mask & (1<<1)) ? (1<<1) : (0<<1);
rgb |= (mask & (1<<2)) ? (1<<2) : (0<<2);
LEDPORT &= ~((1<<LEDPINR) | (1<<LEDPING) | (1<<LEDPINB));
LEDPORT |= (rgb<<LEDPINM);
}
/*void Led::color(uint8_t mask) {
(mask & (1<<0)) ? blue::make_high() : blue::make_low();
(mask & (1<<1)) ? green::make_high() : green::make_low();
(mask & (1<<2)) ? red::make_high() : red::make_low();
}*/
void Led::rainbow(uint8_t time) {
/*void Led::rainbow(uint8_t time) {
fade(RED, YELLOW, time);
fade(YELLOW, GREEN, time);
fade(GREEN, CYAN, time);
fade(CYAN, BLUE, time);
fade(BLUE, MAGENTA, time);
fade(MAGENTA, RED, time);
}
}*/
void Led::fade(int from, int to, int dur) {
/*void Led::fade(int from, int to, int dur) {
for (int i=0;i<0xFF;i++) {
for(int k=0;k<dur;k++) {
for (int j=i;j<0xFF;j++) {
@ -54,4 +46,4 @@ void Led::fade(int from, int to, int dur) {
}
}
}
}
} */

View File

@ -5,19 +5,43 @@
* Author: BlubbFish
*/
#include <avr/io.h>
#include "portc.hpp"
#include "pin.hpp"
#ifndef LED_H_
#define LED_H_
template <typename Port, int pin_red, int pin_green, int pin_blue>
class Led {
public:
Led();
Led() {
init();
}
inline Led(int) {}
//virtual ~Led();
void color(uint8_t mask);
void rainbow(uint8_t time);
void fade(int from, int to, int dur);
void color(uint8_t mask) {
(mask & (1<<0)) ? blue::make_high() : blue::make_low();
(mask & (1<<1)) ? green::make_high() : green::make_low();
(mask & (1<<2)) ? red::make_high() : red::make_low();
}
void rainbow(uint8_t time) {
fade(RED, YELLOW, time);
fade(YELLOW, GREEN, time);
fade(GREEN, CYAN, time);
fade(CYAN, BLUE, time);
fade(BLUE, MAGENTA, time);
fade(MAGENTA, RED, time);
}
void fade(uint8_t from, uint8_t to, uint8_t dur) {
for (uint8_t i=0;i<0xFF;i++) {
for(uint8_t k=0;k<dur;k++) {
for (uint8_t j=i;j<0xFF;j++) {
color(from);
}
for (int j=0;j<i;j++) {
color(to);
}
}
}
}
static const uint8_t BLACK = 0;
static const uint8_t BLUE = 1;
static const uint8_t GREEN = 2;
@ -27,8 +51,15 @@ class Led {
static const uint8_t YELLOW = 6;
static const uint8_t WHITE = 7;
private:
void init();
void init() {
red::make_output();
green::make_output();
blue::make_output();
}
void uninit();
const typedef avrlib::pin<Port, pin_red> red;
const typedef avrlib::pin<Port, pin_green> green;
const typedef avrlib::pin<Port, pin_blue> blue;
};

View File

@ -10,15 +10,18 @@
#include "Rs232.h"
#include "Can.h"
#include "Spi.h"
#include "portc.hpp"
#include <util/delay.h>
Led l;
//Led l;
typedef Led<avrlib::portc, PINC5, PINC6, PINC7> l;
Rs232 r;
Can c(Spi(0));
int main(void)
{
l.color(Led::YELLOW);
//l.color(Led::YELLOW);
l::color(l::YELLOW);
r.send("bla\n");
CANMessage m;
m.id = 0x0123;
@ -28,7 +31,7 @@ int main(void)
m.data[1] = 0xFE;
while(1)
{
l.color(Led::GREEN);
//l.color(Led::GREEN);
_delay_ms(100);
//r.send("Text\n");
//_delay_ms(500);
@ -39,10 +42,10 @@ int main(void)
//c.can_send_message(&m);
uint8_t r = c.can_get_message(&m);
if(r == 0xFF) {
l.color(Led::RED);
//l.color(Led::RED);
_delay_ms(100);
} else {
l.color(Led::BLUE);
//l.color(Led::BLUE);
_delay_ms(1000);
}
}

View File

@ -165,6 +165,15 @@
<Compile Include="mcp2515_defs.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="pin.hpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="portb.hpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="portc.hpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="Rs232.cpp">
<SubType>compile</SubType>
</Compile>

View File

@ -18,20 +18,23 @@ void Spi::init() {
}
}
#define CANDDR_SPI DDRB
/*#define CANDDR_SPI DDRB
#define CANPORT_SPI PORTB
#define CANPIN_SPI PINB
#define CANP_MISO PINB3
#define CANP_MOSI PINB2
#define CANP_SCK PINB1
#define CANP_CS PINB4
#define CANP_CS PINB4*/
void Spi::init_port() {
CANDDR_SPI |= (1<<CANP_SCK) | (1<<CANP_MOSI) | (1<<CANP_CS);
CANDDR_SPI &= ~(1<<CANP_MISO);
CANPORT_SPI &= ~((1<<CANP_MOSI) | (1<<CANP_MISO) | (1<<CANP_SCK));
*canport &= ~((1<<CANP_MOSI) | (1<<CANP_MISO) | (1<<CANP_SCK));
CANPORT_SPI |= (1<<CANP_CS);
mosi::make_output();
mosi::make_low();
sck::make_output();
sck::make_low();
cs::make_output();
cs::make_high();
miso::make_input();
miso::make_low();
}
void Spi::init_spi() {
@ -40,11 +43,11 @@ void Spi::init_spi() {
}
void Spi::CSOff() {
CANPORT_SPI |= (1<<CANP_CS);
cs::make_high();
}
void Spi::CSOn() {
CANPORT_SPI &= ~(1<<CANP_CS);
cs::make_low();
}
uint8_t Spi::send(uint8_t data) {
@ -65,7 +68,28 @@ uint8_t Spi::send_hard( uint8_t data ) {
}
uint8_t Spi::send_soft(uint8_t data) {
uint8_t werti = 0;
uint8_t datain=0;
for (uint8_t a=8; a>0; a--){ //das Byte wird Bitweise nacheinander Gesendet MSB zuerst
datain<<=1; //Schieben um das Richtige Bit zusetzen
sck::make_low(); // Clock auf LOW
if (data & 0x80) { //Ist Bit a in Byte gesetzt
mosi::make_high(); //Set Output High
}
else{
mosi::make_low(); //Set Output Low
}
_delay_us(1);
if(miso::read()) //Lesen des Pegels
{
datain |= 1;
}
_delay_us(1);
sck::make_high(); // Clock auf High
_delay_us(2);
data<<=1; //Schiebe um nächstes Bit zusenden
}
return datain;
/*uint8_t werti = 0;
for (uint8_t i = 8; i != 0; i--) {
CANPORT_SPI = (CANPORT_SPI & (~(1 << CANP_MOSI))) | ((data & 1) << CANP_MOSI);
@ -79,26 +103,5 @@ uint8_t Spi::send_soft(uint8_t data) {
asm volatile ("nop");
werti = (werti << 1) | ((CANPIN_SPI >> CANP_MISO) & 1);
}
//RF_PORT &= ~(1<<CS);
/*for (i=0; i<8; i++)
{
if (wert & (1<<i)) {
CANPORT_SPI |= (1<<CANP_MOSI);
}
else {
CANPORT_SPI &= ~(1<<CANP_MOSI);
}
werti<<=1;
if (CANPIN_SPI & (1<<CANP_MISO)) {
werti|=1;
}
CANPORT_SPI |= (1<<CANP_SCK);
wert<<=1;
_delay_us(0.3);
CANPORT_SPI &= ~(1<<CANP_SCK);
}*/
//RF_PORT |= (1<<CS);
return werti;
return werti; */
}

View File

@ -9,7 +9,12 @@
#ifndef SPI_H_
#define SPI_H_
#include "config.h"
#include <avr/io.h>
#include <util/delay.h>
#include "pin.hpp"
#include "portb.hpp"
class Spi {
public:
@ -19,8 +24,10 @@ class Spi {
uint8_t send(uint8_t data);
private:
const uint8_t mode; //0 Hardware, 1 Software
volatile uint8_t *canport;
//static uint8_t spiport = PORTB;
const typedef avrlib::pin<avrlib::portb, PINB4> cs;
const typedef avrlib::pin<avrlib::portb, PINB3> miso;
const typedef avrlib::pin<avrlib::portb, PINB2> mosi;
const typedef avrlib::pin<avrlib::portb, PINB1> sck;
void init();
void init_port();
void init_spi();

View File

@ -0,0 +1,48 @@
#ifndef AVRLIB_PIN_HPP
#define AVRLIB_PIN_HPP
namespace avrlib {
template <typename Port, uint8_t Pin>
struct pin
{
static void set(bool value = true)
{
if (value)
Port::port(Port::port() | (1<<Pin));
else
Port::port(Port::port() & ~(1<<Pin));
}
static void clear() { set(false); }
static void toggle() { Port::port(Port::port() ^ (1<<Pin)); }
static bool get() { return (Port::port() & (1<<Pin)) != 0; }
static bool value() { return (Port::pin() & (1<<Pin)) != 0; }
static void output(bool value)
{
if (value)
Port::dir(Port::dir() | (1<<Pin));
else
Port::dir(Port::dir() & ~(1<<Pin));
}
static bool output() { return (Port::dir() & (1<<Pin)) != 0; }
static void make_output() { output(true); }
static void make_input() { output(false); clear(); }
static void make_low() { clear(); output(true); }
static void make_high() { set(); output(true); }
static void set_value(bool value) { set(value); }
static void set_high() { set(true); }
static void set_low() { set(false); }
static bool read() { return value(); }
static void pullup() { set_high(); }
};
}
#endif

View File

@ -0,0 +1,22 @@
#ifndef AVRLIB_PORTB_HPP
#define AVRLIB_PORTB_HPP
#include <avr/io.h>
namespace avrlib {
struct portb
{
static uint8_t port() { return PORTB; }
static void port(uint8_t v) { PORTB = v; }
static uint8_t pin() { return PINB; }
static void pin(uint8_t v) { PINB = v; }
static uint8_t dir() { return DDRB; }
static void dir(uint8_t v) { DDRB = v; }
};
}
#endif

View File

@ -0,0 +1,22 @@
#ifndef AVRLIB_PORTC_HPP
#define AVRLIB_PORTC_HPP
#include <avr/io.h>
namespace avrlib {
struct portc
{
static uint8_t port() { return PORTC; }
static void port(uint8_t v) { PORTC = v; }
static uint8_t pin() { return PINC; }
static void pin(uint8_t v) { PINC = v; }
static uint8_t dir() { return DDRC; }
static void dir(uint8_t v) { DDRC = v; }
};
}
#endif