initial commit, first Hardwaretest works
This commit is contained in:
parent
308cdb28ab
commit
2003938552
|
|
@ -0,0 +1,23 @@
|
|||
PROGRAM_NAME = mqtt_ledpanel
|
||||
SRC_DIR = src
|
||||
BUILD_DIR = build
|
||||
|
||||
all: $(PROGRAM_NAME)
|
||||
|
||||
# Create the build directory
|
||||
$(BUILD_DIR):
|
||||
mkdir -pv $(BUILD_DIR)
|
||||
|
||||
# Compile and build the program for Atmega328P
|
||||
$(PROGRAM_NAME): $(BUILD_DIR)
|
||||
avr-gcc -mmcu=atmega328p -Wall -Os -o $(BUILD_DIR)/$(PROGRAM_NAME).elf $(SRC_DIR)/$(PROGRAM_NAME).c
|
||||
|
||||
avr-objcopy -j .text -j .data -O ihex $(BUILD_DIR)/$(PROGRAM_NAME).elf $(BUILD_DIR)/$(PROGRAM_NAME).hex
|
||||
|
||||
# Upload the built program (hex file) to Atmega328P using USBasp
|
||||
upload: $(PROGRAM_NAME)
|
||||
avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 -U flash:w:$(BUILD_DIR)/$(PROGRAM_NAME).hex -D
|
||||
|
||||
# Remove build directory with all built files
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,206 @@
|
|||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/// ATMEGA 328p
|
||||
|
||||
#define ENABLE PD7
|
||||
#define LATCH PB0
|
||||
#define CLOCK PB1
|
||||
|
||||
#define ROT PD6
|
||||
#define GRÜN PD5
|
||||
#define BLAU PD4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void sendSPI (uint16_t SPIdata);
|
||||
|
||||
uint16_t count = 0;
|
||||
uint16_t value ;
|
||||
|
||||
uint16_t SPIstring [16];
|
||||
uint16_t SPIbuffer = 0;
|
||||
uint16_t SPIstring_count;
|
||||
|
||||
uint8_t bcd [5];
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////// M A I N /////////////////////////////////////////////
|
||||
int main(void)
|
||||
{
|
||||
|
||||
DDRD = 0xF0; // PD0-3 als Eingang, PD4-7 als Ausgang setzen
|
||||
DDRB = 0x0F; // PB0-3 als Ausgang, PD4-7 als Ausgang setzen
|
||||
PORTD = 0x0F; // Pullup für PD0-3 aktivieren.
|
||||
// Initialisierung des LED
|
||||
PORTB |= (1<<LATCH); // ENABLE
|
||||
|
||||
count = 0;
|
||||
|
||||
|
||||
//////////////////////MAIN Schleife ///////////////////////////
|
||||
while(1)
|
||||
{
|
||||
_delay_ms (250); // Zyklusgeschwindigkeit von Hauptprogramm bestimmen.
|
||||
|
||||
count++;
|
||||
value = count;
|
||||
|
||||
bcd[0] = value % 10; value = value/10;
|
||||
bcd[1] = value % 10; value = value/10;
|
||||
bcd[2] = value % 10; value = value/10;
|
||||
bcd[3] = value % 10; value = value/10;
|
||||
bcd[4] = value % 10;
|
||||
|
||||
|
||||
LED_putC (bcd[3]);
|
||||
LED_putC (bcd[2]);
|
||||
LED_putC (bcd[1]);
|
||||
LED_putC (bcd[0]);
|
||||
LED_putC (bcd[3]);
|
||||
LED_putC (bcd[2]);
|
||||
LED_putC (bcd[1]);
|
||||
LED_putC (bcd[0]);
|
||||
SPIstring_count = 0;
|
||||
|
||||
|
||||
|
||||
PORTD |= (1<<ENABLE); // ENABLE
|
||||
sendSPI (SPIstring [0]);
|
||||
sendSPI (SPIstring [1]);
|
||||
sendSPI (SPIstring [2]);
|
||||
sendSPI (SPIstring [3]);
|
||||
sendSPI (SPIstring [4]);
|
||||
sendSPI (SPIstring [5]);
|
||||
sendSPI (SPIstring [6]);
|
||||
sendSPI (SPIstring [7]);
|
||||
sendSPI (SPIstring [8]);
|
||||
sendSPI (SPIstring [9]);
|
||||
sendSPI (SPIstring [10]);
|
||||
sendSPI (SPIstring [11]);
|
||||
sendSPI (SPIstring [12]);
|
||||
sendSPI (SPIstring [13]);
|
||||
sendSPI (SPIstring [14]);
|
||||
sendSPI (SPIstring [15]);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
setSPI (0x5552); // "0" oben
|
||||
setSPI (0x2232); // "1" oben
|
||||
setSPI (0x2452); // "2" oben
|
||||
setSPI (0x2452); // "3" oben
|
||||
|
||||
|
||||
|
||||
setSPI (0x0255); // "0" unten
|
||||
setSPI (0x0722); // "1" unten
|
||||
setSPI (0x0712); // "2" unten
|
||||
setSPI (0x0254); // "3" unten
|
||||
|
||||
|
||||
|
||||
|
||||
setSPI (0x7554); // "4" oben
|
||||
setSPI (0x3117); // "5" oben
|
||||
setSPI (0x3116); // "6" oben
|
||||
setSPI (0x2447); // "7" oben
|
||||
|
||||
|
||||
|
||||
|
||||
setSPI (0x0444); // "4" unten
|
||||
setSPI (0x0344); // "5" unten
|
||||
setSPI (0x0255); // "6" unten
|
||||
setSPI (0x0112); // "7" unten
|
||||
|
||||
|
||||
setSPI (0x2552); // "8" oben
|
||||
setSPI (0x5552); // "9" oben
|
||||
setSPI (0x0000); // " " oben
|
||||
setSPI (0x0220); // ":" oben
|
||||
|
||||
setSPI (0x0255); // "8" unten
|
||||
setSPI (0x0346); // "9" unten
|
||||
setSPI (0x0000); // " " unten
|
||||
setSPI (0x0220); // ":" unten
|
||||
|
||||
*/
|
||||
|
||||
|
||||
PORTD &= ~(1<<ENABLE); // ENABLE
|
||||
//_delay_us (250);
|
||||
//PORTD ^= (1<<ENABLE); // ENABLE
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
///////////////////////////////// E n d o f M A I N /////////////////////////////////////
|
||||
|
||||
|
||||
//////////////////////////////// BCD to bitmap converting ///////////////////////////////////
|
||||
|
||||
void LED_putC (uint8_t putChar ){
|
||||
switch (putChar){
|
||||
case 0: SPIstring[SPIstring_count] = 0x5552; SPIstring[SPIstring_count+4] = 0x0255; break;
|
||||
case 1: SPIstring[SPIstring_count] = 0x2232; SPIstring[SPIstring_count+4] = 0x0722; break;
|
||||
case 2: SPIstring[SPIstring_count] = 0x2452; SPIstring[SPIstring_count+4] = 0x0712; break;
|
||||
case 3: SPIstring[SPIstring_count] = 0x2452; SPIstring[SPIstring_count+4] = 0x0254; break;
|
||||
case 4: SPIstring[SPIstring_count] = 0x7554; SPIstring[SPIstring_count+4] = 0x0444; break;
|
||||
case 5: SPIstring[SPIstring_count] = 0x3117; SPIstring[SPIstring_count+4] = 0x0344; break;
|
||||
case 6: SPIstring[SPIstring_count] = 0x3116; SPIstring[SPIstring_count+4] = 0x0255; break;
|
||||
case 7: SPIstring[SPIstring_count] = 0x2447; SPIstring[SPIstring_count+4] = 0x0112; break;
|
||||
case 8: SPIstring[SPIstring_count] = 0x2552; SPIstring[SPIstring_count+4] = 0x0255; break;
|
||||
case 9: SPIstring[SPIstring_count] = 0x5552; SPIstring[SPIstring_count+4] = 0x0346; break;
|
||||
}
|
||||
SPIstring_count++;
|
||||
if (SPIstring_count &0x04) SPIstring_count = SPIstring_count + 4;
|
||||
}
|
||||
///////////////////////// END of Data to bitmap converting ///////////////////////////////////
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////SPI-STRING////////////////////////////////////////////
|
||||
// Hier wird 16bit-Daten & Takt & /CS an SPI-PORT rausschicken & gesteuert.
|
||||
void sendSPI (uint16_t SPIdata){
|
||||
SPIbuffer = SPIdata ; // Daten an MAX504 anpassen, 2 bit nach links verschieben
|
||||
|
||||
int ii=1;
|
||||
while(ii <= 16) { // 16mal wiederholen.
|
||||
ii++;
|
||||
PORTB &= ~(1 << PB1); // Takt fallende Flanke
|
||||
_delay_us (1); // Verzögerung von 1µS
|
||||
PORTD &= ~(1 << PD4); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD5); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD6); // MOSI auf LOW
|
||||
if (SPIbuffer &0x0001) { // wenn 1, dann MOSI = H
|
||||
PORTD |= (1 <<PD4) ;
|
||||
PORTD |= (1 <<PD5) ;
|
||||
PORTD |= (1 <<PD6) ;}
|
||||
SPIbuffer = SPIbuffer >> 1 ; // Byte um 1 nach links verschieben
|
||||
PORTB |= (1 <<PB1) ; // Takt steigende Flanke
|
||||
_delay_us (1); // Verzögerung 1µS
|
||||
}
|
||||
|
||||
PORTD &= ~(1 << PD4); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD5); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD6); // MOSI auf LOW
|
||||
|
||||
|
||||
PORTB |= (1 <<PB0) ; // /Latch auf HIGH
|
||||
_delay_us (2); // Verzögerung 1µS
|
||||
PORTB &= ~(1 << PB0); // /Latch auf LOW
|
||||
}
|
||||
//////////////////////////////END of SPI-STRING////////////////////////////////////////////////
|
||||
|
||||
|
|
@ -0,0 +1,430 @@
|
|||
/*****************************************************************/
|
||||
/* Comb generator with Si5153 and ATMega328PB */
|
||||
/* ************************************************************ */
|
||||
/* Mikrocontroller: ATMEL AVR ATmega328, 8 MHz */
|
||||
/* */
|
||||
/* Compiler: GCC (GNU AVR C-Compiler) */
|
||||
/* Author: Luzia Christiane Tesar */
|
||||
/* Last Change: 2025-08-22 */
|
||||
/*****************************************************************/
|
||||
|
||||
// This is a minimal Firmware for the SI5351 Comb Generator
|
||||
// Developed 2025 at the chair of elektromagnetic theory and
|
||||
// compatibility at TU Dresden
|
||||
// it enables basic interpretion of some SCPI-Style commands and a manual control of the generator using a rotary switch
|
||||
// The code snippet for the communication with the si5351 is a fork from DK7IH:
|
||||
// https://dk7ih.de/a-simple-software-to-control-the-si5351a-generator-chip/
|
||||
|
||||
#define F_CPU 16000000UL
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/sleep.h>
|
||||
#include <avr/eeprom.h>
|
||||
#include <util/delay.h>
|
||||
#include <util/atomic.h>
|
||||
#include "uart.h"
|
||||
|
||||
#define BAUDRATE 9600
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
#define CHAR_NEWLINE '\n'
|
||||
#define CHAR_RETURN '\r'
|
||||
#define RETURN_NEWLINE "\r\n"
|
||||
#define CR "\r\n"
|
||||
volatile unsigned char data_in[32];
|
||||
unsigned char command_in[32];
|
||||
|
||||
volatile unsigned int data_count;
|
||||
volatile unsigned char command_ready;
|
||||
volatile unsigned char remote;
|
||||
|
||||
//volatile char cmd[32], value[32], unit[32];
|
||||
unsigned long t1, freq;
|
||||
|
||||
#define ENABLE PD7
|
||||
#define LATCH PB0
|
||||
#define CLOCK PB1
|
||||
|
||||
#define ROT PD6
|
||||
#define GRÜN PD5
|
||||
#define BLAU PD4
|
||||
|
||||
|
||||
|
||||
|
||||
void sendSPI (uint16_t SPIdata);
|
||||
|
||||
uint16_t count = 0;
|
||||
uint16_t value ;
|
||||
|
||||
uint16_t SPIstring [16];
|
||||
uint16_t SPIbuffer = 0;
|
||||
uint16_t SPIstring_count;
|
||||
|
||||
uint8_t bcd [5];
|
||||
|
||||
|
||||
|
||||
//////////////////////////////// BCD to bitmap converting ///////////////////////////////////
|
||||
|
||||
void LED_putC (uint8_t putChar ){
|
||||
switch (putChar){
|
||||
case 0: SPIstring[SPIstring_count] = 0x5552; SPIstring[SPIstring_count+4] = 0x0255; break;
|
||||
case 1: SPIstring[SPIstring_count] = 0x2232; SPIstring[SPIstring_count+4] = 0x0722; break;
|
||||
case 2: SPIstring[SPIstring_count] = 0x2452; SPIstring[SPIstring_count+4] = 0x0712; break;
|
||||
case 3: SPIstring[SPIstring_count] = 0x2452; SPIstring[SPIstring_count+4] = 0x0254; break;
|
||||
case 4: SPIstring[SPIstring_count] = 0x7554; SPIstring[SPIstring_count+4] = 0x0444; break;
|
||||
case 5: SPIstring[SPIstring_count] = 0x3117; SPIstring[SPIstring_count+4] = 0x0344; break;
|
||||
case 6: SPIstring[SPIstring_count] = 0x3116; SPIstring[SPIstring_count+4] = 0x0255; break;
|
||||
case 7: SPIstring[SPIstring_count] = 0x2447; SPIstring[SPIstring_count+4] = 0x0112; break;
|
||||
case 8: SPIstring[SPIstring_count] = 0x2552; SPIstring[SPIstring_count+4] = 0x0255; break;
|
||||
case 9: SPIstring[SPIstring_count] = 0x5552; SPIstring[SPIstring_count+4] = 0x0346; break;
|
||||
}
|
||||
SPIstring_count++;
|
||||
if (SPIstring_count &0x04) SPIstring_count = SPIstring_count + 4;
|
||||
}
|
||||
///////////////////////// END of Data to bitmap converting ///////////////////////////////////
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////SPI-STRING////////////////////////////////////////////
|
||||
// Hier wird 16bit-Daten & Takt & /CS an SPI-PORT rausschicken & gesteuert.
|
||||
void sendSPI (uint16_t SPIdata){
|
||||
SPIbuffer = SPIdata ; // Daten an MAX504 anpassen, 2 bit nach links verschieben
|
||||
|
||||
int ii=1;
|
||||
while(ii <= 16) { // 16mal wiederholen.
|
||||
ii++;
|
||||
PORTB &= ~(1 << PB1); // Takt fallende Flanke
|
||||
_delay_us (1); // Verzögerung von 1µS
|
||||
PORTD &= ~(1 << PD4); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD5); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD6); // MOSI auf LOW
|
||||
if (SPIbuffer &0x0001) { // wenn 1, dann MOSI = H
|
||||
PORTD |= (1 <<PD4) ;
|
||||
PORTD |= (1 <<PD5) ;
|
||||
PORTD |= (1 <<PD6) ;}
|
||||
SPIbuffer = SPIbuffer >> 1 ; // Byte um 1 nach links verschieben
|
||||
PORTB |= (1 <<PB1) ; // Takt steigende Flanke
|
||||
_delay_us (1); // Verzögerung 1µS
|
||||
}
|
||||
|
||||
PORTD &= ~(1 << PD4); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD5); // MOSI auf LOW
|
||||
PORTD &= ~(1 << PD6); // MOSI auf LOW
|
||||
|
||||
|
||||
PORTB |= (1 <<PB0) ; // /Latch auf HIGH
|
||||
_delay_us (2); // Verzögerung 1µS
|
||||
PORTB &= ~(1 << PB0); // /Latch auf LOW
|
||||
}
|
||||
//////////////////////////////END of SPI-STRING////////////////////////////////////////////////
|
||||
|
||||
/////////////////////
|
||||
//
|
||||
// TWI-Functions
|
||||
//
|
||||
/////////////////////
|
||||
void twi_init(void)
|
||||
{
|
||||
//set SCL to 400kHz
|
||||
TWSR = 0x00;
|
||||
TWBR = 0x0C;
|
||||
|
||||
//enable TWI
|
||||
TWCR = (1<<TWEN);
|
||||
}
|
||||
|
||||
//Send start signal
|
||||
void twi_start(void)
|
||||
{
|
||||
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
|
||||
while ((TWCR & (1<<TWINT)) == 0);
|
||||
}
|
||||
|
||||
//send stop signal
|
||||
void twi_stop(void)
|
||||
{
|
||||
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
|
||||
}
|
||||
|
||||
void twi_write(uint8_t u8data)
|
||||
{
|
||||
TWDR = u8data;
|
||||
TWCR = (1<<TWINT)|(1<<TWEN);
|
||||
while ((TWCR & (1<<TWINT)) == 0);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// M I S C
|
||||
/////////////////////////////////////////////
|
||||
//Substitute defective _delay_ms() function in delay.h
|
||||
void wait_ms(int ms)
|
||||
{
|
||||
int t1, t2;
|
||||
int dtime = (int) 137 * 8;
|
||||
|
||||
for(t1 = 0; t1 < ms; t1++)
|
||||
{
|
||||
for(t2 = 0; t2 < dtime; t2++)
|
||||
{
|
||||
asm volatile ("nop" ::);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// U A R T
|
||||
/////////////////////////////////////////////
|
||||
|
||||
void uart_init (void)
|
||||
{
|
||||
//uint8_t sreg = SREG;
|
||||
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16UL*BAUDRATE) - 1);
|
||||
|
||||
UBRR0H = (uint8_t) (ubrr>>8);
|
||||
UBRR0L = (uint8_t) (ubrr);
|
||||
// Interrupts kurz deaktivieren
|
||||
cli();
|
||||
// UART Receiver und Transmitter anschalten, Receive-Interrupt aktivieren
|
||||
// Data mode 8N1, asynchron
|
||||
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0);
|
||||
UCSR0C = (0 << 4) | (0 << 3) | (3 << 1);
|
||||
// Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte)
|
||||
do
|
||||
{
|
||||
// UDR auslesen (Wert wird nicht verwendet)
|
||||
UDR0;
|
||||
}
|
||||
while (UCSR0A & (1 << RXC0));
|
||||
|
||||
// Rücksetzen von Receive und Transmit Complete-Flags
|
||||
UCSR0A = (1 << RXC0) | (1 << TXC0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
int uart_putc (const uint8_t c)
|
||||
{
|
||||
// Warten, bis UDR bereit ist für einen neuen Wert
|
||||
while (!(UCSR0A & (1 << UDRE0)))
|
||||
;
|
||||
|
||||
// UDR Schreiben startet die Übertragung
|
||||
UDR0 = c;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void uart_puts (const char *s)
|
||||
{
|
||||
do
|
||||
{
|
||||
uart_putc (*s);
|
||||
}
|
||||
while (*s++);
|
||||
}
|
||||
|
||||
|
||||
void usart_ok()
|
||||
{
|
||||
uart_puts("OK\r\n");
|
||||
}
|
||||
|
||||
void copy_command ()
|
||||
{
|
||||
// The USART might interrupt this - don't let that happen!
|
||||
ATOMIC_BLOCK(ATOMIC_FORCEON) {
|
||||
// Copy the contents of data_in into command_in
|
||||
memcpy(command_in, data_in, 32);
|
||||
|
||||
// Now clear data_in, the USART can reuse it now
|
||||
memset(data_in, 0, 32);
|
||||
}
|
||||
}
|
||||
|
||||
//void split_command(char str[]){
|
||||
// str[strlen(str)-1] = '\0';
|
||||
// strcpy(cmd, strtok(str , " "));
|
||||
// strcpy(value, strtok(NULL, " "));
|
||||
// strcpy(unit , strtok(NULL, " "));
|
||||
//}
|
||||
|
||||
//////////////////////////////////////// M A I N /////////////////////////////////////////////
|
||||
int main(void)
|
||||
{
|
||||
|
||||
DDRD = 0xF0; // PD0-3 als Eingang, PD4-7 als Ausgang setzen
|
||||
DDRB = 0x0F; // PB0-3 als Ausgang, PD4-7 als Ausgang setzen
|
||||
PORTD = 0x0F; // Pullup für PD0-3 aktivieren.
|
||||
// Initialisierung des LED
|
||||
PORTB |= (1<<LATCH); // ENABLE
|
||||
|
||||
count = 0;
|
||||
|
||||
|
||||
//////////////////////MAIN Schleife ///////////////////////////
|
||||
while(1)
|
||||
{
|
||||
_delay_ms (250); // Zyklusgeschwindigkeit von Hauptprogramm bestimmen.
|
||||
|
||||
count++;
|
||||
value = count;
|
||||
|
||||
bcd[0] = value % 10; value = value/10;
|
||||
bcd[1] = value % 10; value = value/10;
|
||||
bcd[2] = value % 10; value = value/10;
|
||||
bcd[3] = value % 10; value = value/10;
|
||||
bcd[4] = value % 10;
|
||||
|
||||
|
||||
LED_putC (bcd[3]);
|
||||
LED_putC (bcd[2]);
|
||||
LED_putC (bcd[1]);
|
||||
LED_putC (bcd[0]);
|
||||
LED_putC (bcd[3]);
|
||||
LED_putC (bcd[2]);
|
||||
LED_putC (bcd[1]);
|
||||
LED_putC (bcd[0]);
|
||||
SPIstring_count = 0;
|
||||
|
||||
|
||||
|
||||
PORTD |= (1<<ENABLE); // ENABLE
|
||||
sendSPI (SPIstring [0]);
|
||||
sendSPI (SPIstring [1]);
|
||||
sendSPI (SPIstring [2]);
|
||||
sendSPI (SPIstring [3]);
|
||||
sendSPI (SPIstring [4]);
|
||||
sendSPI (SPIstring [5]);
|
||||
sendSPI (SPIstring [6]);
|
||||
sendSPI (SPIstring [7]);
|
||||
sendSPI (SPIstring [8]);
|
||||
sendSPI (SPIstring [9]);
|
||||
sendSPI (SPIstring [10]);
|
||||
sendSPI (SPIstring [11]);
|
||||
sendSPI (SPIstring [12]);
|
||||
sendSPI (SPIstring [13]);
|
||||
sendSPI (SPIstring [14]);
|
||||
sendSPI (SPIstring [15]);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
setSPI (0x5552); // "0" oben
|
||||
setSPI (0x2232); // "1" oben
|
||||
setSPI (0x2452); // "2" oben
|
||||
setSPI (0x2452); // "3" oben
|
||||
|
||||
|
||||
|
||||
setSPI (0x0255); // "0" unten
|
||||
setSPI (0x0722); // "1" unten
|
||||
setSPI (0x0712); // "2" unten
|
||||
setSPI (0x0254); // "3" unten
|
||||
|
||||
|
||||
|
||||
|
||||
setSPI (0x7554); // "4" oben
|
||||
setSPI (0x3117); // "5" oben
|
||||
setSPI (0x3116); // "6" oben
|
||||
setSPI (0x2447); // "7" oben
|
||||
|
||||
|
||||
|
||||
|
||||
setSPI (0x0444); // "4" unten
|
||||
setSPI (0x0344); // "5" unten
|
||||
setSPI (0x0255); // "6" unten
|
||||
setSPI (0x0112); // "7" unten
|
||||
|
||||
|
||||
setSPI (0x2552); // "8" oben
|
||||
setSPI (0x5552); // "9" oben
|
||||
setSPI (0x0000); // " " oben
|
||||
setSPI (0x0220); // ":" oben
|
||||
|
||||
setSPI (0x0255); // "8" unten
|
||||
setSPI (0x0346); // "9" unten
|
||||
setSPI (0x0000); // " " unten
|
||||
setSPI (0x0220); // ":" unten
|
||||
|
||||
*/
|
||||
|
||||
|
||||
PORTD &= ~(1<<ENABLE); // ENABLE
|
||||
//_delay_us (250);
|
||||
//PORTD ^= (1<<ENABLE); // ENABLE
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//int main(void)
|
||||
//{
|
||||
// //char string[]="Hello world!!";
|
||||
// uart_init();
|
||||
// //uart_puts(string);
|
||||
// sei();
|
||||
// //PORTC = 0x30;//I²C-Bus lines: PC4=SDA, PC5=SCL
|
||||
// DDRB = ( 1 << PB5 ); // PB0 an PORTB als Ausgang setzen
|
||||
//
|
||||
// while( 1 ) { // Endlosschleife
|
||||
// if (command_ready == TRUE) {
|
||||
// copy_command();
|
||||
// if (strcmp(command_in, "1\r")==0) {
|
||||
// PORTB |= ( 1 << PB5 ); // Toggle PB0 z.B. angeschlossene LED
|
||||
// }
|
||||
// if (strcmp(command_in, "0\r")==0) {
|
||||
// PORTB &= ~( 1 << PB5 ); // Toggle PB0 z.B. angeschlossene LED
|
||||
// uart_puts("Miau\r\n");
|
||||
// }
|
||||
// command_ready = FALSE;
|
||||
// }
|
||||
// //_delay_ms(1000); // Eine Sekunde +/-1/10000 Sekunde warten...
|
||||
//
|
||||
// //twi_init();
|
||||
// }
|
||||
//
|
||||
// return 0;
|
||||
//}
|
||||
|
||||
///////////////////////////////// E n d o f M A I N /////////////////////////////////////
|
||||
|
||||
|
||||
ISR(USART_RX_vect)
|
||||
{
|
||||
// Get data from the USART in register
|
||||
data_in[data_count] = UDR0;
|
||||
|
||||
// End of line!
|
||||
if (data_in[data_count] == '\r') {
|
||||
command_ready = TRUE;
|
||||
uart_puts("miau\r\n");
|
||||
// Reset to 0, ready to go again
|
||||
data_count = 0;
|
||||
} else {
|
||||
data_count++;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef UART_H
|
||||
#define UART_H
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
extern void uart_init (void);
|
||||
extern int uart_putc (const uint8_t);
|
||||
extern char uart_getc (void);
|
||||
|
||||
static inline void uart_flush (void)
|
||||
{
|
||||
while (UCSR0B & (1 << UDRIE0));
|
||||
}
|
||||
|
||||
#endif /* UART_H */
|
||||
Loading…
Reference in New Issue