mega168 version
This commit is contained in:
parent
526dbbf4ee
commit
8250d528a5
132
5x7test.c
132
5x7test.c
@ -1,5 +1,5 @@
|
|||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Copyright (C) 02/2010 by Olaf Rempel *
|
* Copyright (C) 03/2010 by Olaf Rempel *
|
||||||
* razzor@kopf-tisch.de *
|
* razzor@kopf-tisch.de *
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
@ -20,71 +20,109 @@
|
|||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
#define F_CPU 3686400
|
#define F_CPU 8000000
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
|
|
||||||
#include "6x8_vertikal_LSB_1.h"
|
#include "6x8_vertikal_LSB_1.h"
|
||||||
|
|
||||||
/*
|
#define nop() asm volatile ("nop")
|
||||||
* at90s2313 pinout:
|
|
||||||
* PB0-4 => LED C1-5
|
|
||||||
* PB5-7 => free/ISP
|
|
||||||
* PD0-6 => LED R1-7 (with 100R resistors)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* for TC12-11 */
|
#define nCLEAR PB0
|
||||||
//#define COL_SEL(x) PORTB = ~(x)
|
#define RCLK PB1
|
||||||
//#define COL_DATA(x) PORTD = (x)
|
#define nOE PB2
|
||||||
|
#define MOSI PB3
|
||||||
/* for TA12-11 */
|
#define MISO PB3
|
||||||
#define COL_SEL(x) PORTB = (x)
|
#define SCK PB5
|
||||||
#define COL_DATA(x) PORTD = ~(x)
|
|
||||||
|
|
||||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
|
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
|
||||||
|
|
||||||
static const char text[] = " <<<AT90S2313:Scrolltext-Demo>>>";
|
static const char text[] = " <<<atmega168:Scrolltext-Demo>>> ";
|
||||||
|
|
||||||
/* scrollbuffer */
|
/* scrollbuffer */
|
||||||
static volatile uint8_t data[5 + 1 + 5];
|
static volatile uint8_t data[32];
|
||||||
static volatile uint8_t offset;
|
static volatile uint8_t offset;
|
||||||
|
|
||||||
|
void setRow(uint8_t row)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
volatile uint8_t *p = data + offset + 19;
|
||||||
|
|
||||||
|
row = (1 << row);
|
||||||
|
|
||||||
|
/* bit-banging spi, 20 cols */
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
PORTB &= ~(1<<MISO);
|
||||||
|
if (*p-- & row)
|
||||||
|
PORTB |= (1<<MOSI);
|
||||||
|
|
||||||
|
PORTB |= (1<<SCK);
|
||||||
|
PORTB &= ~(1<<SCK);
|
||||||
|
|
||||||
|
/* insert extra cols (unused hc595 outputs) */
|
||||||
|
if (i == 5 || i == 12 || i == 19) {
|
||||||
|
PORTB |= (1<<SCK);
|
||||||
|
PORTB &= ~(1<<SCK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* disable outputs, update register */
|
||||||
|
PORTB |= ((1<<nOE) | (1<<RCLK));
|
||||||
|
|
||||||
|
/* select row */
|
||||||
|
PORTC |= 0x07;
|
||||||
|
PORTC &= ~(row & 0x07);
|
||||||
|
PORTD |= 0x78;
|
||||||
|
PORTD &= ~(row & 0x78);
|
||||||
|
|
||||||
|
/* enable outputs again */
|
||||||
|
PORTB &= ~((1<<nOE) | (1<<RCLK));
|
||||||
|
}
|
||||||
|
|
||||||
ISR(SIG_OVERFLOW0)
|
ISR(SIG_OVERFLOW0)
|
||||||
{
|
{
|
||||||
static uint8_t col;
|
static uint8_t row;
|
||||||
/* ~2,8ms */
|
|
||||||
TCNT0 = 0xFF - 40;
|
|
||||||
|
|
||||||
COL_DATA(0x00);
|
/* 2ms */
|
||||||
COL_SEL(1 << col);
|
TCNT0 = 0xFF - 64;
|
||||||
COL_DATA(data[offset + col]);
|
|
||||||
|
|
||||||
col = (col == 5) ? 0 : col + 1;
|
setRow(row++);
|
||||||
|
if (row == 7)
|
||||||
|
row = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
/* row 1-3 */
|
||||||
|
DDRC = 0x07;
|
||||||
|
PORTC = 0x07;
|
||||||
|
|
||||||
|
/* row 4-7 */
|
||||||
|
DDRD = 0x78;
|
||||||
|
PORTD = 0x78;
|
||||||
|
|
||||||
|
/* ctrl signals */
|
||||||
|
DDRB = (1<<nCLEAR) | (1<<RCLK) | (1<<nOE) | (1<<MOSI) | (1<<SCK);
|
||||||
|
PORTB = (1<<nCLEAR) | (1<<nOE);
|
||||||
|
|
||||||
|
/* F_CPU/256, Overflow Interrupt */
|
||||||
|
TCCR0B = (1<<CS02);
|
||||||
|
TIMSK0 = (1<<TOIE0);
|
||||||
|
|
||||||
|
sei();
|
||||||
|
|
||||||
uint8_t mode = 0;
|
uint8_t mode = 0;
|
||||||
uint8_t pos = 0;
|
uint8_t pos = 0;
|
||||||
uint8_t delay = 0;
|
uint8_t delay = 0;
|
||||||
|
|
||||||
DDRB = 0x1F;
|
|
||||||
DDRD = 0x7F;
|
|
||||||
|
|
||||||
/* Timer0: FCPU/256 */
|
|
||||||
TCCR0 = (1<<CS02);
|
|
||||||
TIMSK = (1<<TOIE0);
|
|
||||||
sei();
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (offset == 6) {
|
if (offset == 6) {
|
||||||
offset = 0;
|
offset = 0;
|
||||||
if (text[pos +1] == '\0') {
|
if (text[pos +3] == '\0') {
|
||||||
pos = 0;
|
pos = 0;
|
||||||
mode++;
|
mode++;
|
||||||
break;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
pos++;
|
pos++;
|
||||||
@ -92,27 +130,37 @@ int main(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (offset == 0) {
|
if (offset == 0) {
|
||||||
memcpy_P((void *)&data[0], font[(uint8_t)text[pos]], 5);
|
int i;
|
||||||
memcpy_P((void *)&data[1 + 5], font[(uint8_t)text[pos +1]], 5);
|
for (i = 0; i < 5; i++) {
|
||||||
|
memcpy_P((void *)&data[i * 6], font[(uint8_t)text[pos + i]], 5);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
offset++;
|
offset++;
|
||||||
delay = 12;
|
delay = 6;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
memcpy_P((void *)&data[0], &font[pos], 5);
|
if (offset == 6) {
|
||||||
|
offset = 0;
|
||||||
if (pos == (ARRAY_SIZE(font) -1)) {
|
if (pos == (ARRAY_SIZE(font) -3)) {
|
||||||
pos = 0;
|
pos = 0;
|
||||||
mode++;
|
mode++;
|
||||||
break;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delay = 20;
|
if (offset == 0) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 5; i++) {
|
||||||
|
memcpy_P((void *)&data[i * 6], font[(uint8_t)pos + i], 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
offset++;
|
||||||
|
delay = 6;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// font from http://www.mikrocontroller.net/topic/54860 */
|
||||||
const prog_char font[][5]={
|
const prog_char font[][5]={
|
||||||
{0x00,0x00,0x00,0x00,0x00}, // 0x00
|
{0x00,0x00,0x00,0x00,0x00}, // 0x00
|
||||||
{0x1E,0x35,0x31,0x35,0x1E}, // 0x01
|
{0x1E,0x35,0x31,0x35,0x1E}, // 0x01
|
||||||
|
6
Makefile
6
Makefile
@ -1,6 +1,6 @@
|
|||||||
PRG = 5x7test
|
PRG = 5x7test
|
||||||
OBJ = 5x7test.o
|
OBJ = 5x7test.o
|
||||||
MCU_TARGET = at90s2313
|
MCU_TARGET = atmega168
|
||||||
OPTIMIZE = -Os
|
OPTIMIZE = -Os
|
||||||
|
|
||||||
DEFS =
|
DEFS =
|
||||||
@ -41,5 +41,5 @@ bin: $(PRG).bin
|
|||||||
$(OBJCOPY) -j .text -j .data -O binary $< $@
|
$(OBJCOPY) -j .text -j .data -O binary $< $@
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
avrdude -p 2313 -c avr910 -b 115200 -P /dev/ttyUSB0 -e -V -U flash:w:$(PRG).hex
|
# avrdude -p 2313 -c avr910 -b 115200 -P /dev/ttyUSB0 -e -V -U flash:w:$(PRG).hex
|
||||||
# avrdude -c dragon_isp -P usb -p 2313 -B 2 -e -V -U flash:w:$(PRG).hex
|
avrdude -c dragon_isp -P usb -p m168 -e -V -U flash:w:$(PRG).hex
|
||||||
|
BIN
eagle/5x7led-bot.png
Normal file
BIN
eagle/5x7led-bot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
eagle/5x7led-sch.png
Normal file
BIN
eagle/5x7led-sch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 117 KiB |
BIN
eagle/5x7led-top.png
Normal file
BIN
eagle/5x7led-top.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
eagle/5x7led.brd
Normal file
BIN
eagle/5x7led.brd
Normal file
Binary file not shown.
BIN
eagle/5x7led.sch
Normal file
BIN
eagle/5x7led.sch
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user