Timer configured and first implementation of the ISR.
This commit is contained in:
parent
4fb68b970a
commit
58a7f12826
4 changed files with 27 additions and 25 deletions
|
@ -42,40 +42,42 @@ void init()
|
||||||
// Timer-Interrupt "TIMER1" vorbereiten
|
// Timer-Interrupt "TIMER1" vorbereiten
|
||||||
//cli(); //
|
//cli(); //
|
||||||
|
|
||||||
set_bit(TIMSK, OCIE1A);
|
set_bit(TIMSK, OCIE1A); // Interrupt für ISR COMPA
|
||||||
set_bit(TCCR1B, WGM12);
|
set_bit(TCCR1B, WGM12); // Überlauf
|
||||||
|
|
||||||
// Animations-Geschwindigkeit
|
// Animations-Geschwindigkeit
|
||||||
// (vergleichswert bei dem der Interrupt ausgelöst wird)
|
// (vergleichswert bei dem der Interrupt ausgelöst wird)
|
||||||
OCR1AH = 0x01;
|
// 625d = 0x271 = 0b00000010, 0b01110001
|
||||||
OCR1AL = 0x00;
|
OCR1AH = 0b00000010;
|
||||||
|
OCR1AL = 0b01110001;
|
||||||
|
|
||||||
// anpassen auf reihenweise ausgabe
|
// anpassen auf reihenweise ausgabe
|
||||||
|
// Vorteiler durch 64 (0x011) ----> CS12=0, CS11=1, CS10=1
|
||||||
clear_bit(TCCR1B, CS12); // Prescaler 64
|
clear_bit(TCCR1B, CS12); // Prescaler 64
|
||||||
set_bit(TCCR1B, CS11);
|
set_bit(TCCR1B, CS11);
|
||||||
set_bit(TCCR1B, CS10);
|
set_bit(TCCR1B, CS10);
|
||||||
|
|
||||||
sei();
|
|
||||||
|
|
||||||
|
sei(); // Set enable interrupt bit (Muss gesetzt werden damit es überhaupt aufgerufen wird)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interruptvektor von TIMER1
|
// Interruptvektor von TIMER1
|
||||||
//SIGNAL(SIG_OUTPUT_COMPARE1A) // alte schreibweise
|
//SIGNAL(SIG_OUTPUT_COMPARE1A) // alte schreibweise
|
||||||
ISR (TIMER1_COMPA_vect)
|
ISR (TIMER1_COMPA_vect)
|
||||||
{
|
{
|
||||||
|
// PORTD = __, 9, C, B, A,D+,D-,__
|
||||||
|
PORTD &= 0b11000111; // Reset durch Bitmaske
|
||||||
|
PORTD |= ((1 << (cube_level))<< 3); // Level setzen (A=0, B=1, C=2)
|
||||||
|
|
||||||
// Vorgang für reihenweise Ausgabe.
|
// PORTB = 1..8
|
||||||
// Alle Pins von PORTD auf LOW setzen
|
// 0 = leuchtet, 1 = leuchtet nicht (invertiert!)
|
||||||
// Höchstes Bit in PORTA auf 0 setzen (Leitung 9 für letzte Reihe)
|
PORTB = ~(cube & (0b11111111 << (cube_level*9)));
|
||||||
|
|
||||||
// bei cube_row_offset % 3 eine Ebene weiter schalten (ABC-Leitungen durch rotieren)
|
PORTD &= 0b10111111; // 7tes Bit löschen (9)
|
||||||
// bei Systemstart muss A aktiviert sein.
|
PORTD |= ~((cube & (1 << (cube_level*9+8))) << 6);
|
||||||
|
|
||||||
// bits der anzuzeigenden reihe auslesen (cube & (0b00000111 << cube_row_offset))
|
|
||||||
// und in PORTD und Pin 8 von PORTA setzen
|
|
||||||
|
|
||||||
// cube_row_offset += 3 // immer um 3 Bits weiter springen in 32Bit Variable
|
|
||||||
|
|
||||||
// cube_row_offset auf 0 setzen wenn maximum überschritten (27-3 = 24)
|
|
||||||
|
|
||||||
|
//cube_level++;
|
||||||
|
//if (cube_level > 2) cube_level = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
//#include <avr/wdt.h>
|
//#include <avr/wdt.h>
|
||||||
|
|
||||||
// Cube-Data
|
// Cube-Data
|
||||||
volatile uint32_t cube = 0x00000000;
|
volatile uint32_t cube = 0x0000000F; // Aktuelle Frame
|
||||||
// Bit Offset in Cube-Data
|
// Bit Offset in Cube-Data
|
||||||
volatile uint8_t cube_row_offset = 0x00;
|
volatile uint8_t cube_level = 0; // Ebene
|
||||||
|
|
||||||
// Prototypen
|
// Prototypen
|
||||||
void init(void);
|
void init(void);
|
||||||
|
|
|
@ -26,7 +26,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
|
||||||
if (rq->wIndex.bytes[0] == 2)
|
if (rq->wIndex.bytes[0] == 2)
|
||||||
cube[0][0][2] = 1;
|
cube[0][0][2] = 1;
|
||||||
if (rq->wIndex.bytes[0] == 3)
|
if (rq->wIndex.bytes[0] == 3)
|
||||||
cube[0][1][0] = 1;*/
|
cube[0][1][0] = 1;
|
||||||
|
|
||||||
if (rq->wIndex.bytes[0] == 0)
|
if (rq->wIndex.bytes[0] == 0)
|
||||||
x = rq->wValue.bytes[0];
|
x = rq->wValue.bytes[0];
|
||||||
|
@ -39,7 +39,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
|
||||||
|
|
||||||
else if (rq->wIndex.bytes[0] == 3)
|
else if (rq->wIndex.bytes[0] == 3)
|
||||||
cube[x][y][z] = rq->wValue.bytes[0];
|
cube[x][y][z] = rq->wValue.bytes[0];
|
||||||
|
*/
|
||||||
} else if ( rq->bRequest == CUSTOM_RQ_GET_STATUS ) {
|
} else if ( rq->bRequest == CUSTOM_RQ_GET_STATUS ) {
|
||||||
// Send one byte to the USB host.
|
// Send one byte to the USB host.
|
||||||
|
|
||||||
|
|
|
@ -55,13 +55,13 @@ PROGMEM char usbHidReportDescriptor[22] = { /* USB report descriptor */
|
||||||
|
|
||||||
void init_usb(void);
|
void init_usb(void);
|
||||||
|
|
||||||
volatile uint8_t x;
|
//volatile uint8_t x;
|
||||||
volatile uint8_t y;
|
//volatile uint8_t y;
|
||||||
volatile uint8_t z;
|
//volatile uint8_t z;
|
||||||
|
|
||||||
// usb buffer
|
// usb buffer
|
||||||
//extern uint8_t buffer[3][3][3]; // Framebuffer
|
//extern uint8_t buffer[3][3][3]; // Framebuffer
|
||||||
extern uint8_t cube[3][3][3]; // Framebuffer
|
//extern uint8_t cube[3][3][3]; // Framebuffer
|
||||||
|
|
||||||
#endif // __usb_h__
|
#endif // __usb_h__
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue