my first commit
This commit is contained in:
parent
881b5492f4
commit
86d4afe23e
4
Makefile
4
Makefile
|
@ -165,8 +165,10 @@ sflash: $(TARGET).hex
|
|||
avrdude -p m32 -b 115200 -u -c avr109 -P $(SERIAL) -U f:w:$< -F
|
||||
echo X > $(SERIAL)
|
||||
|
||||
uflash: $(TARGET).hex
|
||||
avrdude -c usbasp -p atmega32 -V -U f:w:$< -F
|
||||
|
||||
.PHONY: clean mrproper sflash
|
||||
.PHONY: clean mrproper sflash uflash
|
||||
##############################################################################
|
||||
# configure ethersex
|
||||
#
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#ifdef ANIMATION_TESTS
|
||||
void test1(){
|
||||
unsigned char x,y;
|
||||
|
||||
for (y=0;y<NUM_ROWS;y++){
|
||||
for (x=0;x<NUM_COLS;x++){
|
||||
setpixel((pixel){x,y}, 3);
|
||||
|
@ -25,7 +26,7 @@ void test_level1(){
|
|||
wait(5);
|
||||
}
|
||||
}
|
||||
for(;;) wait(100);
|
||||
wait(2000);
|
||||
}
|
||||
|
||||
void test_level2(){
|
||||
|
@ -36,7 +37,7 @@ void test_level2(){
|
|||
wait(5);
|
||||
}
|
||||
}
|
||||
for(;;) wait(100);
|
||||
wait(2000);
|
||||
}
|
||||
|
||||
void test_level3(){
|
||||
|
@ -47,7 +48,7 @@ void test_level3(){
|
|||
wait(5);
|
||||
}
|
||||
}
|
||||
for(;;) wait(100);
|
||||
wait(2000);
|
||||
}
|
||||
|
||||
void test_levels(){
|
||||
|
@ -68,11 +69,168 @@ void test_palette(){
|
|||
b=y%4;
|
||||
for (x=0;x<NUM_COLS;x++){
|
||||
setpixel((pixel){x,y}, b);
|
||||
wait(1);
|
||||
// wait(1);
|
||||
}
|
||||
}
|
||||
for(;;) wait(100);
|
||||
wait(2000);
|
||||
}
|
||||
|
||||
void test_palette2(){
|
||||
unsigned char x,y,b;
|
||||
for (x=0;x<NUM_COLS;x++){
|
||||
b=x%4;
|
||||
for (y=0;y<NUM_ROWS;y++){
|
||||
setpixel((pixel){x,y}, b);
|
||||
// wait(1);
|
||||
}
|
||||
}
|
||||
wait(1000);
|
||||
for (x=0;x<NUM_COLS;x++){
|
||||
// shift image right
|
||||
shift_pixmap_l();
|
||||
wait(30);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void test_lines(){
|
||||
|
||||
unsigned char n, delay=80;
|
||||
|
||||
line((pixel){0,0}, (pixel){7,0} ,3);
|
||||
wait(delay);
|
||||
line((pixel){7,0}, (pixel){7,7} ,3);
|
||||
wait(delay);
|
||||
line((pixel){7,7}, (pixel){0,7} ,3);
|
||||
wait(delay);
|
||||
line((pixel){0,7}, (pixel){0,0} ,3);
|
||||
wait(delay);
|
||||
|
||||
line((pixel){7,7}, (pixel){0,0} ,3);
|
||||
wait(delay);
|
||||
line((pixel){0,7}, (pixel){7,0} ,3);
|
||||
wait(delay);
|
||||
|
||||
//sunrays
|
||||
for (n=0;n<=NUMPLANE;n++){
|
||||
line((pixel){15,0}, (pixel){63,0} ,n);
|
||||
wait(delay);
|
||||
line((pixel){15,0}, (pixel){32,7} ,n);
|
||||
wait(delay);
|
||||
line((pixel){15,0}, (pixel){63,7} ,n);
|
||||
wait(delay);
|
||||
line((pixel){15,0}, (pixel){15,7} ,n);
|
||||
wait(delay);
|
||||
}
|
||||
|
||||
for (n=NUMPLANE;n!=255;n--){
|
||||
line((pixel){15,0}, (pixel){63,0} ,n);
|
||||
wait(delay);
|
||||
line((pixel){15,0}, (pixel){32,7} ,n);
|
||||
wait(delay);
|
||||
line((pixel){15,0}, (pixel){63,7} ,n);
|
||||
wait(delay);
|
||||
line((pixel){15,0}, (pixel){15,7} ,n);
|
||||
}
|
||||
|
||||
|
||||
wait(500);
|
||||
|
||||
}
|
||||
|
||||
void movinglines(){
|
||||
unsigned char x,y;
|
||||
|
||||
line((pixel){63,7}, (pixel){63,0} ,3);
|
||||
|
||||
// linie wandert nach rechts
|
||||
for (x=0;x<64;x++){
|
||||
shift_pixmap_l();
|
||||
wait(10);
|
||||
}
|
||||
|
||||
// von unten nach oben
|
||||
for (y=7;y!=255;y--){
|
||||
line((pixel){0,y}, (pixel){63,y} ,3);
|
||||
wait(20);
|
||||
line((pixel){0,y}, (pixel){63,y} ,0);
|
||||
//wait(10);
|
||||
}
|
||||
|
||||
//eine linie von rechts nach links und
|
||||
// 8 mal von oben nach unten
|
||||
// gleichzeitig
|
||||
for (x=0;x<63;x++){
|
||||
y=x%8;
|
||||
line((pixel){0,y}, (pixel){63,y} ,3);
|
||||
line((pixel){x,0}, (pixel){x,7} ,3);
|
||||
wait(50);
|
||||
|
||||
line((pixel){0,y}, (pixel){63,y} ,0);
|
||||
line((pixel){x,0}, (pixel){x,7} ,0);
|
||||
//wait(10);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void rectangles(){
|
||||
|
||||
unsigned char x;
|
||||
unsigned int delay=500;
|
||||
|
||||
clear_screen(0);
|
||||
filled_rectangle((pixel){1,1},4,2,3);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){10,1},5,5,3);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){30,2},30,5,2);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){40,0},8,8,1);
|
||||
wait(delay);
|
||||
|
||||
filled_rectangle((pixel){1,1},4,2,2);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){10,1},5,5,1);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){30,2},30,5,3);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){40,0},8,8,2);
|
||||
wait(delay);
|
||||
|
||||
|
||||
for (x=0;x<64;x++){
|
||||
shift_pixmap_l();
|
||||
wait(30);
|
||||
}
|
||||
|
||||
filled_rectangle((pixel){30,0},8,8,3);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){31,1},6,6,2);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){32,2},4,4,1);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){33,3},2,2,3);
|
||||
wait(delay);
|
||||
wait(delay);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){33,3},2,2,1);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){32,2},4,4,2);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){31,1},6,6,3);
|
||||
wait(delay);
|
||||
filled_rectangle((pixel){30,0},8,8,1);
|
||||
wait(delay);
|
||||
|
||||
|
||||
|
||||
wait(delay);
|
||||
wait(delay);
|
||||
wait(delay);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef ANIMATION_OFF
|
||||
|
|
|
@ -18,8 +18,8 @@ ifeq ($(BORG_HW),HW_BORG_LS)
|
|||
SRC = borg_hw_borg_ls.c
|
||||
endif
|
||||
|
||||
ifeq ($(BORG_HW),HW_BORG_LS)
|
||||
SRC = borg_hw_borg_ls.c
|
||||
ifeq ($(BORG_HW),HW_BORG_MH)
|
||||
SRC = borg_hw_borg_mh.c
|
||||
endif
|
||||
|
||||
ifeq ($(BORG_HW),HW_BORG_MINI)
|
||||
|
|
|
@ -0,0 +1,150 @@
|
|||
|
||||
#include "../config.h"
|
||||
#include "../makros.h"
|
||||
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/wdt.h>
|
||||
|
||||
#include "borg_hw.h"
|
||||
|
||||
|
||||
#define ROWPORT PORTC
|
||||
#define ROWDDR DDRC
|
||||
|
||||
#define COLPORT PORTA
|
||||
#define COLDDR DDRA
|
||||
|
||||
#define MYPORT PORTC
|
||||
#define MYPORT2 PORTA
|
||||
|
||||
#define SHOW 0
|
||||
#define DATA 1
|
||||
|
||||
#define PIN_ENABLE 0
|
||||
#define PIN_DATA 1
|
||||
|
||||
unsigned char pixmap[NUMPLANE][NUM_ROWS][LINEBYTES];
|
||||
|
||||
|
||||
inline void rowshow(unsigned char row, unsigned char plane){
|
||||
|
||||
unsigned char p, n,m, outb, clkmsk;
|
||||
|
||||
clkmsk = 0x80>>row;
|
||||
|
||||
// if (row==4)
|
||||
{
|
||||
MYPORT &= ~(1 << PIN_ENABLE) ;
|
||||
//MYPORT |= (1 << PIN_ENABLE) ; //hide
|
||||
// MYPORT |= (1 << PIN_ENABLE) ; //hide
|
||||
for (n=7;n<8;n--)
|
||||
{
|
||||
outb = pixmap[plane][row][n];
|
||||
p=0x80;
|
||||
for (m=0;m<8;m++)
|
||||
{
|
||||
if (outb & p)
|
||||
// MYPORT |= (1 << PIN_DATA);
|
||||
MYPORT &= ~(1 << PIN_DATA) ;
|
||||
else
|
||||
// MYPORT &= ~(1 << PIN_DATA) ; //off
|
||||
MYPORT |= (1 << PIN_DATA);
|
||||
|
||||
MYPORT2 &= ~clkmsk ;
|
||||
MYPORT2 |= clkmsk ;
|
||||
|
||||
p>>=1;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
MYPORT |= (1 << PIN_ENABLE) ; //
|
||||
//MYPORT &= ~(1 << PIN_ENABLE) ;
|
||||
// for(n=0;n<250;n++) asm ("nop");
|
||||
|
||||
|
||||
}
|
||||
|
||||
SIGNAL(SIG_OUTPUT_COMPARE0)
|
||||
{
|
||||
static unsigned char plane = 0;
|
||||
unsigned char row = 0;
|
||||
|
||||
switch (plane){
|
||||
case 0:
|
||||
OCR0 = 30;
|
||||
break;
|
||||
case 1:
|
||||
OCR0 = 60;
|
||||
break;
|
||||
case 2:
|
||||
OCR0 = 80;
|
||||
break;
|
||||
// case 3:
|
||||
// OCR0 = 24;
|
||||
// break;
|
||||
// case 4:
|
||||
// OCR0 = 48;
|
||||
// break;
|
||||
}
|
||||
|
||||
for(row=0;row<NUM_ROWS;row++){
|
||||
rowshow(row, plane);
|
||||
}
|
||||
|
||||
if(++plane==NUMPLANE) plane=0;
|
||||
wdt_reset();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void timer0_on(){
|
||||
/* TCCR0: FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
|
||||
CS02 CS01 CS00
|
||||
0 0 0 stop
|
||||
0 0 1 clk
|
||||
0 1 0 clk/8
|
||||
0 1 1 clk/64
|
||||
1 0 0 clk/256
|
||||
1 0 1 clk/1024
|
||||
|
||||
*/
|
||||
TCCR0 = 0x08 |0x04; // CTC Mode, clk/256 MH: slower 5 statt 4
|
||||
TCNT0 = 0; // reset timer
|
||||
OCR0 = 0x30; // Compare with this value 0x30
|
||||
TIMSK = 0x02; // Compare match Interrupt on
|
||||
}
|
||||
|
||||
void timer0_off(){
|
||||
cli();
|
||||
|
||||
MYPORT &= ~(1 << PIN_ENABLE) ;
|
||||
//MYPORT |= (1 << PIN_ENABLE) ; //hide
|
||||
//COLPORT |= (1<<PIN_LINE_EN);//blank display
|
||||
// PORTD |= 0x01;//blank display
|
||||
TCCR0 = 0x00;
|
||||
sei();
|
||||
}
|
||||
|
||||
void watchdog_enable()
|
||||
{
|
||||
wdt_reset();
|
||||
wdt_enable(0x00); // 17ms
|
||||
|
||||
}
|
||||
|
||||
void borg_hw_init(){
|
||||
//COLPORT |= (1<<PIN_CLK) | (1<<PIN_LINE_EN);
|
||||
//COLDDR |= (1<<PIN_CLK) | (1<<PIN_LINE_EN) | (1<<PIN_DATA);
|
||||
|
||||
//ROWDDR |= 0x07;
|
||||
|
||||
DDRA = 0xFF;
|
||||
|
||||
DDRC = 0xFF;
|
||||
|
||||
watchdog_enable();
|
||||
timer0_on();
|
||||
}
|
||||
|
|
@ -11,7 +11,8 @@ int "Number of brightnes-levels" NUMPLANE 3
|
|||
choice 'Hardware Driver' \
|
||||
"Borg-16 HW_BORG_16 \
|
||||
Andre-borg HW_BORG_ANDRE \
|
||||
Laufschrift-borg HW_BORG_LS \
|
||||
Laufschrift-borg HW_BORG_LS \
|
||||
Laufschrift-borg-mh HW_BORG_MH \
|
||||
Borg-mini HW_BORG_MINI" \
|
||||
'Borg-16' BORG_HW
|
||||
|
||||
|
@ -28,6 +29,11 @@ if [ "$BORG_HW" == "HW_BORG_LS" ] ; then
|
|||
source borg_hw/config_borg_ls.in
|
||||
fi
|
||||
|
||||
if [ "$BORG_HW" == "HW_BORG_MH" ] ; then
|
||||
source borg_hw/config_borg_mh.in
|
||||
fi
|
||||
|
||||
|
||||
if [ "$BORG_HW" == "HW_BORG_MINI" ] ; then
|
||||
source borg_hw/config_borg_mini.in
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
mainmenu_option next_comment
|
||||
comment "MH Laufschrift-Borg port setup"
|
||||
|
||||
|
||||
choice 'port for the 8 clock lines' \
|
||||
"PORTA PORTA \
|
||||
PORTB PORTB \
|
||||
PORTC PORTC \
|
||||
PORTD PORTD" \
|
||||
'PORTA' CLOCKPORT
|
||||
|
||||
|
||||
choice 'port for enable and data line' \
|
||||
"PORTA PORTA \
|
||||
PORTB PORTB \
|
||||
PORTC PORTC \
|
||||
PORTD PORTD" \
|
||||
'PORTA' DATAPORT
|
||||
|
||||
comment "pin numbers for enable and data"
|
||||
|
||||
|
||||
choice 'DATA Pin' \
|
||||
"Pin0 0 \
|
||||
Pin1 1 \
|
||||
Pin2 2 \
|
||||
Pin3 3 \
|
||||
Pin4 4 \
|
||||
Pin5 5 \
|
||||
Pin6 6 \
|
||||
Pin7 7" \
|
||||
'Pin1' PIN_DATA
|
||||
|
||||
choice 'LINE_EN Pin' \
|
||||
"Pin0 0 \
|
||||
Pin1 1 \
|
||||
Pin2 2 \
|
||||
Pin3 3 \
|
||||
Pin4 4 \
|
||||
Pin5 5 \
|
||||
Pin6 6 \
|
||||
Pin7 7" \
|
||||
'Pin0' PIN_ENABLE
|
||||
|
||||
endmenu
|
|
@ -28,9 +28,9 @@ void display_loop(){
|
|||
percnt_inc();
|
||||
#endif
|
||||
|
||||
mode = setjmp(newmode_jmpbuf);
|
||||
// mode = setjmp(newmode_jmpbuf);
|
||||
oldOldmode = oldMode;
|
||||
|
||||
mode =0;
|
||||
#ifdef JOYSTICK_SUPPORT
|
||||
waitForFire = 1;
|
||||
#endif
|
||||
|
@ -54,6 +54,10 @@ void display_loop(){
|
|||
|
||||
#ifdef ANIMATION_SPIRALE
|
||||
case 2:
|
||||
movinglines();
|
||||
test_lines();
|
||||
rectangles();
|
||||
scrolltext("d/#ABC");
|
||||
spirale(5);
|
||||
break;
|
||||
#endif
|
||||
|
@ -72,7 +76,7 @@ void display_loop(){
|
|||
|
||||
#ifdef ANIMATION_SCHACHBRETT
|
||||
case 5:
|
||||
schachbrett(20);
|
||||
//schachbrett(10);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
@ -101,22 +105,26 @@ void display_loop(){
|
|||
#endif
|
||||
|
||||
case 29:
|
||||
mode = 1;
|
||||
// mode = 1;
|
||||
break;
|
||||
|
||||
#ifdef ANIMATION_TESTS
|
||||
case 31:
|
||||
test_level1();
|
||||
//test_level1();
|
||||
|
||||
break;
|
||||
case 32:
|
||||
test_level2();
|
||||
//test_level2();
|
||||
|
||||
break;
|
||||
case 33:
|
||||
test_level3();
|
||||
//test_level3();
|
||||
|
||||
break;
|
||||
case 35:
|
||||
test1();
|
||||
while(1);
|
||||
test_palette();
|
||||
test_palette2();
|
||||
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
|
2
main.c
2
main.c
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include "config.h"
|
||||
#include "borg_hw/borg_hw.h"
|
||||
#include "can/borg_can.h"
|
||||
// #include "can/borg_can.h"
|
||||
#include "random/prng.h"
|
||||
#include "random/persistentCounter.h"
|
||||
#include "display_loop.h"
|
||||
|
|
77
pixel.c
77
pixel.c
|
@ -33,6 +33,83 @@ void setpixel(pixel p, unsigned char value ){
|
|||
pixmap[plane][0][pos]&=mask;
|
||||
}
|
||||
|
||||
|
||||
void line(pixel p1, pixel p2 ,unsigned char value){
|
||||
char dx, dy, stepx, stepy, fraction;
|
||||
|
||||
dy = p2.y - p1.y;
|
||||
dx = p2.x - p1.x;
|
||||
|
||||
if ( dy < 0 )
|
||||
{
|
||||
dy = -dy;
|
||||
stepy = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
stepy = 1;
|
||||
}
|
||||
|
||||
if ( dx < 0 )
|
||||
{
|
||||
dx = -dx;
|
||||
stepx = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
stepx = 1;
|
||||
}
|
||||
|
||||
dx <<= 1;
|
||||
dy <<= 1;
|
||||
|
||||
setpixel(p1 , value );
|
||||
if ( dx > dy )
|
||||
{
|
||||
fraction = dy - (dx >> 1);
|
||||
while ( p1.x != p2.x )
|
||||
{
|
||||
if ( fraction >= 0 )
|
||||
{
|
||||
p1.y += stepy;
|
||||
fraction -= dx;
|
||||
}
|
||||
p1.x += stepx;
|
||||
fraction += dy;
|
||||
setpixel(p1 , value );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fraction = dx - (dy >> 1);
|
||||
while ( p1.y != p2.y )
|
||||
{
|
||||
if ( fraction >= 0 )
|
||||
{
|
||||
p1.x += stepx;
|
||||
fraction -= dy;
|
||||
}
|
||||
p1.y += stepy;
|
||||
fraction += dx;
|
||||
setpixel(p1 , value );
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void filled_rectangle(pixel p1, unsigned char w, unsigned char h ,unsigned char value){
|
||||
|
||||
unsigned char y;
|
||||
|
||||
for (y=p1.y;y<=(p1.y+h);y++){
|
||||
line((pixel){p1.x,y}, (pixel){(p1.x+w),y} ,value);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//shifts pixmap left. It is really shifted right, but because col0 is left in the Display it's left.
|
||||
void shift_pixmap_l(){
|
||||
unsigned char plane, row, byte;
|
||||
|
|
11
pixel.h
11
pixel.h
|
@ -26,6 +26,17 @@ void clear_screen(unsigned char value);
|
|||
void setpixel(pixel p, unsigned char value);
|
||||
#define clearpixel(p) setpixel(p, 0);
|
||||
|
||||
// straight or non straight line from one point to the other
|
||||
// value=brightness
|
||||
void line(pixel p1, pixel p2 ,unsigned char value);
|
||||
|
||||
// filled_rectangle p1=upper right corner, w=width, h=height ,
|
||||
// value=brightness
|
||||
void filled_rectangle(pixel p1, unsigned char w, unsigned char h ,unsigned char value);
|
||||
|
||||
|
||||
|
||||
|
||||
unsigned char get_pixel(pixel p);
|
||||
unsigned char get_next_pixel(pixel p, direction dir);
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
dep_bool_menu "Scrolltext Support" SCROLLTEXT_SUPPORT y
|
||||
|
||||
choice 'Scrolltext Font' \
|
||||
'Arial_8 font_arial8 \
|
||||
"Arial_8 font_arial8 \
|
||||
Small_6 font_small6 \
|
||||
Uni_53 font_uni53' \
|
||||
Uni_53 font_uni53" \
|
||||
'Arial_8' SCROLLTEXT_FONT
|
||||
|
||||
int "Scrolltest buffer size" SCROLLTEXT_BUFFER_SIZE 128
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include "font_small6.h"
|
||||
#include "font_uni53.h"
|
||||
|
||||
#define MAX_FONTS 1
|
||||
#define MAX_FONTS 3
|
||||
font fonts[MAX_FONTS];
|
||||
#define MAX_SPECIALCOLORS 3
|
||||
|
||||
|
|
Loading…
Reference in New Issue