pio entfernt & spiegel test routine

This commit is contained in:
Tristan Krause 2019-03-26 08:44:30 +01:00
parent b7b3fa6327
commit 13e95264fb
20 changed files with 129 additions and 1056 deletions

File diff suppressed because one or more lines are too long

BIN
B15F.elf

Binary file not shown.

172
B15F.hex
View file

@ -6,93 +6,91 @@
:100050000C9464000C9464000C9464000C94640090
:100060000C9464000C9464000C9464000C94640080
:100070000C9464000C9464000C9464000C94640070
:100080000C9464000C9464000C946400D10211245C
:100080000C9464000C9464000C946400C602112467
:100090001FBECFEFD0E4DEBFCDBF21E0A0E0B1E0D6
:1000A00001C01D92A131B207E1F710E0C7E4D0E032
:1000B00004C02197FE010E94F802C634D107C9F797
:1000C0000E94CC020C9401030C9400001F920F922A
:1000D0000FB60F921124289A2FEF84E39CE0215051
:1000E00080409040E1F700C0000028982FEF84E3A3
:1000F0009CE0215080409040E1F700C00000EBCF31
:1001000080E191E00E94A20060E08DE091E00E9419
:10011000C9006FEF8DE091E00E94EA0060E08AE0A4
:1001200091E00E94C9006FEF8AE091E00E94EA002E
:100130006FEF87E091E00E94EA0080E091E00C948C
:10014000BF010895249A259A2698279A529A539A7D
:10015000549A80E58CBD81E08DBD5A985B985C987F
:100160005A9A5B9A5C9A08955A985B985C9860FDDD
:100170005A9A61FD5B9A62FD5C9A08956EBD0DB45A
:1001800007FEFDCF8EB50895FC0171836083428325
:1001900008951F93CF93DF93EC01162F6A81888116
:1001A00099810E94B40060E4888199810E94BE0018
:1001B00060E0888199810E94BE00612F88819981C9
:1001C0000E94BE0067E088819981DF91CF911F91E5
:1001D0000C94B4001F93CF93DF93EC01162F6A8128
:1001E000888199810E94B40060E4888199810E948D
:1001F000BE0061E0888199810E94BE00612F8881E4
:1002000099810E94BE0067E088819981DF91CF913A
:100210001F910C94B4001F93CF93DF93EC01162F22
:100220006A81888199810E94B40060E48881998103
:100230000E94BE0062E1888199810E94BE00612F08
:10024000888199810E94BE0067E088819981DF9151
:10025000CF911F910C94B4001F93CF93DF93EC01C7
:10026000162F6A81888199810E94B40060E4888198
:1002700099810E94BE0063E1888199810E94BE003D
:10028000612F888199810E94BE0067E088819981F1
:10029000DF91CF911F910C94B4001F93CF93DF9304
:1002A000EC016A81888199810E94B40061E48881AF
:1002B00099810E94BE0062E1888199810E94BE00FE
:1002C00060E0888199810E94BE00182F67E08881D4
:1002D00099810E94B400812FDF91CF911F910895E1
:1002E0001F93CF93DF93EC016A81888199810E94EB
:1002F000B40061E4888199810E94BE0063E1888135
:1003000099810E94BE0060E0888199810E94BE00B0
:10031000182F67E0888199810E94B400812FDF91B6
:10032000CF911F910895FC01428308950F931F936D
:10033000CF93DF93EC018B016A81888199810E94C0
:10034000B400B8010024660F771F001C660F771FEA
:10035000001C672F702D888199810E94BE00602F3C
:10036000660F660F888199810E94BE0067E08881D0
:100370009981DF91CF911F910F910C94B40010924D
:100380007C0087E880937A00089580917C00807ECD
:10039000682B60937C0080917A00806480937A005F
:1003A00083EA91E00197F1F700C0000080917A00A4
:1003B00086FDFCCF809178009091790008950F938D
:1003C0001F93CF93DF9361E08DE091E00E940B01DA
:1003D000C1E0D0E001E010E02FEF84E39CE0215089
:1003E00080409040E1F700C00000B8010C2E01C031
:1003F000660F0A94EAF78DE091E00E940B012196C6
:10040000C930D10549F761E08AE091E00E940B0113
:10041000C1E0D0E001E010E08FEF94E32CE08150E8
:1004200090402040E1F700C00000B8010C2E01C050
:10043000660F0A94EAF78AE091E00E940B01219688
:10044000C930D10549F7C0E0D0E0BE0184E091E0B9
:100450000E94960187E893E10197F1F700C0000040
:100460002196C11594E0D90781F7C0E0D0E0BE0124
:1004700081E091E00E94960187E893E10197F1F70E
:1004800000C000002196C11594E0D90781F7DF91E3
:10049000CF911F910F9108950F931F93CF93DF93E7
:1004A00061E08DE091E00E940B01C1E0D0E001E04D
:1004B00010E02FEF84E39CE0215080409040E1F772
:1004C00000C00000B8010C2E01C0660F0A94EAF7C4
:1004D0008DE091E00E940B012196C930D10549F7CA
:1004E000DF91CF911F910F9108950F931F93CF9399
:1004F000DF9361E08AE091E00E940B01C1E0D0E06F
:1005000001E010E02FEF84E39CE021508040904018
:10051000E1F700C00000B8010C2E01C0660F0A947C
:10052000EAF78AE091E00E940B012196C930D105DB
:1005300049F7DF91CF911F910F910895CF93DF93EA
:10054000C0E0D0E0BE0184E091E00E94960187E81F
:1005500093E10197F1F700C000002196C11594E0E6
:10056000D90781F7DF91CF910895CF93DF93C0E052
:10057000D0E0BE0181E091E00E94960187E893E11E
:100580000197F1F700C000002196C11594E0D9074A
:1005900081F7DF91CF9108950E9480000E94DF01D2
:1005A000FDCF80E191E00E94A10042E060E171E0B6
:1005B0008DE091E00E94C40043E060E171E08AE0D8
:1005C00091E00E94C40045E060E171E087E091E0C5
:1005D0000E94C40040E060E171E084E091E00E948C
:1005E000930141E060E171E081E091E00C949301BE
:1005F000EE0FFF1F0024001C0BBE0790F691E02DAC
:060600000994F894FFCFFD
:1000B00004C02197FE010E94ED02C634D107C9F7A2
:1000C0000E94C1020C94F6020C9400001F920F9241
:1000D0000FB60F92112491E085B1892785B92FEFD2
:1000E00034E38CE0215030408040E1F700C0000054
:1000F000F3CF80E191E00E949B0060E08DE091E011
:100100000E94DE006FEF8DE091E00E94FF0060E052
:100110008AE091E00E94DE006FEF8AE091E00E94A9
:10012000FF006FEF87E091E00E94FF0080E091E028
:100130000C94D401089584B1806B84B926988AB157
:100140008C618AB980E58CBD81E08DBD8BB1837EE9
:100150008BB95A9A5B9A5C9A08958BB1837E8BB95E
:100160008BB160FD10C090E0892B8BB98BB161FD24
:1001700010C090E0892B8BB98BB162FD10C090E06C
:10018000892B8BB9089594E0892B8BB98BB161FFD2
:10019000F0CF98E0892B8BB98BB162FFF0CF90E163
:1001A000892B8BB908956EBD0DB407FEFDCF8EB5BA
:1001B0000895FC0171836083428308951F93CF9358
:1001C000DF93EC01162F6A81888199810E94AD002E
:1001D00060E4888199810E94D30060E088819981E0
:1001E0000E94D300612F888199810E94D30067E02B
:1001F00088819981DF91CF911F910C94AD001F935D
:10020000CF93DF93EC01162F6A81888199810E9438
:10021000AD0060E4888199810E94D30061E088810B
:1002200099810E94D300612F888199810E94D30017
:1002300067E088819981DF91CF911F910C94AD0087
:100240001F93CF93DF93EC01162F6A8188819981E8
:100250000E94AD0060E4888199810E94D30062E130
:10026000888199810E94D300612F888199810E94A1
:10027000D30067E088819981DF91CF911F910C9421
:10028000AD001F93CF93DF93EC01162F6A81888115
:1002900099810E94AD0060E4888199810E94D30019
:1002A00063E1888199810E94D300612F88819981BF
:1002B0000E94D30067E088819981DF91CF911F91DF
:1002C0000C94AD001F93CF93DF93EC016A8188817A
:1002D00099810E94AD0061E4888199810E94D300D8
:1002E00062E1888199810E94D30060E088819981D0
:1002F0000E94D300182F67E0888199810E94AD0089
:10030000812FDF91CF911F9108951F93CF93DF939A
:10031000EC016A81888199810E94AD0061E4888145
:1003200099810E94D30063E1888199810E94D30062
:1003300060E0888199810E94D300182F67E088814E
:1003400099810E94AD00812FDF91CF911F91089577
:10035000FC01428308950F931F93CF93DF93EC0129
:100360008B016A81888199810E94AD00B8010024C7
:10037000660F771F001C660F771F001C672F702DFC
:10038000888199810E94D300602F660F660F888153
:1003900099810E94D30067E088819981DF91CF9194
:1003A0001F910F910C94AD0010927C0087E8809310
:1003B0007A00089580917C00807E682B60937C0099
:1003C00080917A00806480937A0083EA91E00197BB
:1003D000F1F700C0000080917A0086FDFCCF80918B
:1003E00078009091790008950F931F93CF93DF9336
:1003F00061E08DE091E00E942001C1E0D0E001E0E9
:1004000010E02FEF84E39CE0215080409040E1F722
:1004100000C00000B8010C2E01C0660F0A94EAF774
:100420008DE091E00E9420012196C930D10549F765
:10043000DF91CF911F910F9108950F931F93CF9349
:10044000DF9361E08AE091E00E942001C1E0D0E00A
:1004500001E010E02FEF84E39CE0215080409040C9
:10046000E1F700C00000B8010C2E01C0660F0A942D
:10047000EAF78AE091E00E9420012196C930D10577
:1004800049F7DF91CF911F910F910895CF93DF939B
:10049000C0E0D0E0BE0184E091E00E94AB0187E8BB
:1004A00093E10197F1F700C000002196C11594E097
:1004B000D90781F72FE78AE196E0215080409040EC
:1004C000E1F700C0000060E070E084E091E0DF91BF
:1004D000CF910C94AB01CF93DF93C0E0D0E0BE018D
:1004E00081E091E00E94AB0187E893E10197F1F789
:1004F00000C000002196C11594E0D90781F72FE7CD
:100500008AE196E0215080409040E1F700C0000071
:1005100060E070E081E091E0DF91CF910C94AB015D
:1005200060E080E091E00E94DA01BC0184E091E0AB
:100530000E94AB0161E080E091E00E94DA01BC0121
:1005400081E091E00E94AB018DE091E00E94850185
:10055000682F8DE091E00E94200187E091E00E94E9
:100560008501682F8AE091E00E942001D9CF0E9486
:10057000F4010E941D020E9446020E946B020E942A
:1005800090020E9479000E94B702FDCF80E191E0C5
:100590000E949A0042E060E171E08DE091E00E94EB
:1005A000D90043E060E171E08AE091E00E94D90067
:1005B00045E060E171E087E091E00E94D90040E011
:1005C00060E171E084E091E00E94A80141E060E117
:1005D00071E081E091E00C94A801EE0FFF1F002470
:1005E000001C0BBE0790F691E02D0994F894FFCF04
:00000001FF

View file

@ -12,7 +12,7 @@ OUTPUT = B15F.elf
HEX = B15F.hex
CFLAGS = -std=c++14 -O3 -mmcu=atmega1284 -DF_CPU=20000000 -DPIO_DISABLE_I2C
LDFLAGS =
OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o vars.o
OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o global_vars.o
COMPILE = $(COMPILER_PATH) $(CFLAGS)

View file

@ -1,4 +1,4 @@
#include "vars.h"
#include "global_vars.h"
SPI spi;
MCP23S17 beba0(spi, SPIADR::BEBA0);

View file

@ -1,5 +1,5 @@
#ifndef VARS_H
#define VARS_H
#ifndef GLOBAL_VARS_H
#define GLOBAL_VARS_H
#include "mcp23s17.h"
#include "tlc5615.h"
@ -13,4 +13,4 @@ extern TLC5615 dac0;
extern TLC5615 dac1;
extern ADU adu;
#endif // VARS_H
#endif // GLOBAL_VARS_H

View file

@ -2,19 +2,17 @@
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/wdt.h>
#include "vars.h"
#include "global_vars.h"
#include "selftest.h"
#define LED B0
#define LED PB0
ISR(WDT_vect)
{
while(1)
{
dWrite(LED, HIGH);
_delay_ms(200);
dWrite(LED, LOW);
PORTB ^= _BV(LED);
_delay_ms(200);
}
WDTCSR |= _BV(WDIE);
@ -36,8 +34,8 @@ void initAll()
int main()
{
/*WDTCSR = _BV(WDIE) | _BV(WDP3) | _BV(WDP0);
dMode(LED, OUT);
dWrite(LED, LOW);
DDRB |= _BV(LED);
PORTB &= ~_BV(LED);
wdt_reset();
sei();*/

95
pio.h
View file

@ -1,95 +0,0 @@
/***
* _______ _____ ___
* |_ __ \|_ _|.' `.
* | |__) | | | / .-. \
* | ___/ | | | | | |
* _| |_ _| |_\ `-' /
* |_____| |_____|`.___.'
*
* Preprocessor I/O Library
*
* ~ version 1.0.0
* ~ written by Tristan Krause
* ~ visit www.devfix.net
*
* You should have received a copy of the MIT License.
* If not, see <https://opensource.org/licenses/MIT>.
*
* How does it work?
* ----------------------------------------------
* Instead of the classical way
* (1a) DDRA |= (1<<PA0);
* you can now write
* (1b) dMode(A0, OUT);
*
* It gets directly replaced by the fast
* PORT manipulation command (1a) using
* preprocessor macros. This way, PIO
* does not increase the overall memory
* consumption or slow down the execution
* like Arduino does.
*
* Why using PIO? The Port commands are enough...
* ----------------------------------------------
* First, the code gets a bit more readable,
* especially for beginners.
* Second, you can define pins regardless
* their corresponding port, resulting in
* a more flexible code. For instance:
* (2a) #define LED A0
* dMode(LED, OUT);
* dWrite(LED, HIGH);
* If you now choose another pin, the rest
* of the code can stay the same and PIO
* will take care of the right PORT commands.
* (2b) #define LED D6 // this changed
* dMode(LED, OUT); // same command
* dWrite(LED, HIGH); // same command
*
*/
#ifndef PIO_H
#define PIO_H
// current version
#define PIOLIB 100
#include <avr/io.h>
#ifdef HIGH
#undef HIGH
#endif
#define HIGH 1
#ifndef LOW
#undef LOW
#endif
#define LOW 0
#ifndef OUT
#undef OUT
#endif
#define OUT 1
#ifndef OUTPUT
#undef OUTPUT
#endif
#define OUTPUT 1
#ifndef IN
#undef IN
#endif
#define IN 0
#ifndef INPUT
#undef INPUT
#endif
#define INPUT 0
#include "pio/dmode.h"
#include "pio/dwrite.h"
#include "pio/dread.h"
#include "pio/mcus.h"
#endif // PIO_H

View file

@ -1,248 +0,0 @@
/***
* dmode.h
* This file is part of the PIO library.
* For license information see "pio.h" in the parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should be included directly. Use "pio.h" instead.
#endif
#ifndef PIO_DMODE_H
#define PIO_DMODE_H
#define dMode(A, B) dMode_(A, B)
#define dMode_(A, B) DMODE ## _ ## A ## _ ## B
#ifdef PA0
#define DMODE_A0_1 DDRA |= 0x01
#define DMODE_A0_0 DDRA &= 0xFE
#else
#define DMODE_A0_1 # Pin A0 not supported on this MCU!
#define DMODE_A0_0 DMODE_A0_1
#endif
#ifdef PA1
#define DMODE_A1_1 DDRA |= 0x02
#define DMODE_A1_0 DDRA &= 0xFD
#else
#define DMODE_A1_1 # Pin A1 not supported on this MCU!
#define DMODE_A1_0 DMODE_A1_1
#endif
#ifdef PA2
#define DMODE_A2_1 DDRA |= 0x04
#define DMODE_A2_0 DDRA &= 0xFB
#else
#define DMODE_A2_1 # Pin A2 not supported on this MCU!
#define DMODE_A2_0 DMODE_A2_1
#endif
#ifdef PA3
#define DMODE_A3_1 DDRA |= 0x08
#define DMODE_A3_0 DDRA &= 0xF7
#else
#define DMODE_A3_1 # Pin A3 not supported on this MCU!
#define DMODE_A3_0 DMODE_A3_1
#endif
#ifdef PA4
#define DMODE_A4_1 DDRA |= 0x10
#define DMODE_A4_0 DDRA &= 0xEF
#else
#define DMODE_A4_1 # Pin A4 not supported on this MCU!
#define DMODE_A4_0 DMODE_A4_1
#endif
#ifdef PA5
#define DMODE_A5_1 DDRA |= 0x20
#define DMODE_A5_0 DDRA &= 0xDF
#else
#define DMODE_A5_1 # Pin A5 not supported on this MCU!
#define DMODE_A5_0 DMODE_A5_1
#endif
#ifdef PA6
#define DMODE_A6_1 DDRA |= 0x40
#define DMODE_A6_0 DDRA &= 0xBF
#else
#define DMODE_A6_1 # Pin A6 not supported on this MCU!
#define DMODE_A6_0 DMODE_A6_1
#endif
#ifdef PA7
#define DMODE_A7_1 DDRA |= 0x80
#define DMODE_A7_0 DDRA &= 0x7F
#else
#define DMODE_A7_1 # Pin A7 not supported on this MCU!
#define DMODE_A7_0 DMODE_A7_1
#endif
#ifdef PB0
#define DMODE_B0_1 DDRB |= 0x01
#define DMODE_B0_0 DDRB &= 0xFE
#else
#define DMODE_B0_1 # Pin B0 not supported on this MCU!
#define DMODE_B0_0 DMODE_B0_1
#endif
#ifdef PB1
#define DMODE_B1_1 DDRB |= 0x02
#define DMODE_B1_0 DDRB &= 0xFD
#else
#define DMODE_B1_1 # Pin B1 not supported on this MCU!
#define DMODE_B1_0 DMODE_B1_1
#endif
#ifdef PB2
#define DMODE_B2_1 DDRB |= 0x04
#define DMODE_B2_0 DDRB &= 0xFB
#else
#define DMODE_B2_1 # Pin B2 not supported on this MCU!
#define DMODE_B2_0 DMODE_B2_1
#endif
#ifdef PB3
#define DMODE_B3_1 DDRB |= 0x08
#define DMODE_B3_0 DDRB &= 0xF7
#else
#define DMODE_B3_1 # Pin B3 not supported on this MCU!
#define DMODE_B3_0 DMODE_B3_1
#endif
#ifdef PB4
#define DMODE_B4_1 DDRB |= 0x10
#define DMODE_B4_0 DDRB &= 0xEF
#else
#define DMODE_B4_1 # Pin B4 not supported on this MCU!
#define DMODE_B4_0 DMODE_B4_1
#endif
#ifdef PB5
#define DMODE_B5_1 DDRB |= 0x20
#define DMODE_B5_0 DDRB &= 0xDF
#else
#define DMODE_B5_1 # Pin B5 not supported on this MCU!
#define DMODE_B5_0 DMODE_B5_1
#endif
#ifdef PB6
#define DMODE_B6_1 DDRB |= 0x40
#define DMODE_B6_0 DDRB &= 0xBF
#else
#define DMODE_B6_1 # Pin B6 not supported on this MCU!
#define DMODE_B6_0 DMODE_B6_1
#endif
#ifdef PB7
#define DMODE_B7_1 DDRB |= 0x80
#define DMODE_B7_0 DDRB &= 0x7F
#else
#define DMODE_B7_1 # Pin B7 not supported on this MCU!
#define DMODE_B7_0 DMODE_B7_1
#endif
#ifdef PC0
#define DMODE_C0_1 DDRC |= 0x01
#define DMODE_C0_0 DDRC &= 0xFE
#else
#define DMODE_C0_1 # Pin C0 not supported on this MCU!
#define DMODE_C0_0 DMODE_C0_1
#endif
#ifdef PC1
#define DMODE_C1_1 DDRC |= 0x02
#define DMODE_C1_0 DDRC &= 0xFD
#else
#define DMODE_C1_1 # Pin C1 not supported on this MCU!
#define DMODE_C1_0 DMODE_C1_1
#endif
#ifdef PC2
#define DMODE_C2_1 DDRC |= 0x04
#define DMODE_C2_0 DDRC &= 0xFB
#else
#define DMODE_C2_1 # Pin C2 not supported on this MCU!
#define DMODE_C2_0 DMODE_C2_1
#endif
#ifdef PC3
#define DMODE_C3_1 DDRC |= 0x08
#define DMODE_C3_0 DDRC &= 0xF7
#else
#define DMODE_C3_1 # Pin C3 not supported on this MCU!
#define DMODE_C3_0 DMODE_C3_1
#endif
#ifdef PC4
#define DMODE_C4_1 DDRC |= 0x10
#define DMODE_C4_0 DDRC &= 0xEF
#else
#define DMODE_C4_1 # Pin C4 not supported on this MCU!
#define DMODE_C4_0 DMODE_C4_1
#endif
#ifdef PC5
#define DMODE_C5_1 DDRC |= 0x20
#define DMODE_C5_0 DDRC &= 0xDF
#else
#define DMODE_C5_1 # Pin C5 not supported on this MCU!
#define DMODE_C5_0 DMODE_C5_1
#endif
#ifdef PC6
#define DMODE_C6_1 DDRC |= 0x40
#define DMODE_C6_0 DDRC &= 0xBF
#else
#define DMODE_C6_1 # Pin C6 not supported on this MCU!
#define DMODE_C6_0 DMODE_C6_1
#endif
#ifdef PC7
#define DMODE_C7_1 DDRC |= 0x80
#define DMODE_C7_0 DDRC &= 0x7F
#else
#define DMODE_C7_1 # Pin C7 not supported on this MCU!
#define DMODE_C7_0 DMODE_C7_1
#endif
#ifdef PD0
#define DMODE_D0_1 DDRD |= 0x01
#define DMODE_D0_0 DDRD &= 0xFE
#else
#define DMODE_D0_1 # Pin D0 not supported on this MCU!
#define DMODE_D0_0 DMODE_D0_1
#endif
#ifdef PD1
#define DMODE_D1_1 DDRD |= 0x02
#define DMODE_D1_0 DDRD &= 0xFD
#else
#define DMODE_D1_1 # Pin D1 not supported on this MCU!
#define DMODE_D1_0 DMODE_D1_1
#endif
#ifdef PD2
#define DMODE_D2_1 DDRD |= 0x04
#define DMODE_D2_0 DDRD &= 0xFB
#else
#define DMODE_D2_1 # Pin D2 not supported on this MCU!
#define DMODE_D2_0 DMODE_D2_1
#endif
#ifdef PD3
#define DMODE_D3_1 DDRD |= 0x08
#define DMODE_D3_0 DDRD &= 0xF7
#else
#define DMODE_D3_1 # Pin D3 not supported on this MCU!
#define DMODE_D3_0 DMODE_D3_1
#endif
#ifdef PD4
#define DMODE_D4_1 DDRD |= 0x10
#define DMODE_D4_0 DDRD &= 0xEF
#else
#define DMODE_D4_1 # Pin D4 not supported on this MCU!
#define DMODE_D4_0 DMODE_D4_1
#endif
#ifdef PD5
#define DMODE_D5_1 DDRD |= 0x20
#define DMODE_D5_0 DDRD &= 0xDF
#else
#define DMODE_D5_1 # Pin D5 not supported on this MCU!
#define DMODE_D5_0 DMODE_D5_1
#endif
#ifdef PD6
#define DMODE_D6_1 DDRD |= 0x40
#define DMODE_D6_0 DDRD &= 0xBF
#else
#define DMODE_D6_1 # Pin D6 not supported on this MCU!
#define DMODE_D6_0 DMODE_D6_1
#endif
#ifdef PD7
#define DMODE_D7_1 DDRD |= 0x80
#define DMODE_D7_0 DDRD &= 0x7F
#else
#define DMODE_D7_1 # Pin D7 not supported on this MCU!
#define DMODE_D7_0 DMODE_D7_1
#endif
#endif // PIO_DMODE_H

View file

@ -1,183 +0,0 @@
/***
* dread.h
* This file is part of the PIO library.
* For license information see "pio.h" in the parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should be included directly. Use "pio.h" instead.
#endif
#ifndef PIO_DREAD_H
#define PIO_DREAD_H
#define dRead(A) dRead_(A)
#define dRead_(A) DREAD ## _ ## A
#ifdef PA0
#define DREAD_A0 (PINA & 0x01)
#else
#define DREAD_A0 # Pin A0 not supported on this MCU!
#endif
#ifdef PA1
#define DREAD_A1 (PINA & 0x02)
#else
#define DREAD_A1 # Pin A1 not supported on this MCU!
#endif
#ifdef PA2
#define DREAD_A2 (PINA & 0x04)
#else
#define DREAD_A2 # Pin A2 not supported on this MCU!
#endif
#ifdef PA3
#define DREAD_A3 (PINA & 0x08)
#else
#define DREAD_A3 # Pin A3 not supported on this MCU!
#endif
#ifdef PA4
#define DREAD_A4 (PINA & 0x10)
#else
#define DREAD_A4 # Pin A4 not supported on this MCU!
#endif
#ifdef PA5
#define DREAD_A5 (PINA & 0x20)
#else
#define DREAD_A5 # Pin A5 not supported on this MCU!
#endif
#ifdef PA6
#define DREAD_A6 (PINA & 0x40)
#else
#define DREAD_A6 # Pin A6 not supported on this MCU!
#endif
#ifdef PA7
#define DREAD_A7 (PINA & 0x80)
#else
#define DREAD_A7 # Pin A7 not supported on this MCU!
#endif
#ifdef PB0
#define DREAD_B0 (PINB & 0x01)
#else
#define DREAD_B0 # Pin B0 not supported on this MCU!
#endif
#ifdef PB1
#define DREAD_B1 (PINB & 0x02)
#else
#define DREAD_B1 # Pin B1 not supported on this MCU!
#endif
#ifdef PB2
#define DREAD_B2 (PINB & 0x04)
#else
#define DREAD_B2 # Pin B2 not supported on this MCU!
#endif
#ifdef PB3
#define DREAD_B3 (PINB & 0x08)
#else
#define DREAD_B3 # Pin B3 not supported on this MCU!
#endif
#ifdef PB4
#define DREAD_B4 (PINB & 0x10)
#else
#define DREAD_B4 # Pin B4 not supported on this MCU!
#endif
#ifdef PB5
#define DREAD_B5 (PINB & 0x20)
#else
#define DREAD_B5 # Pin B5 not supported on this MCU!
#endif
#ifdef PB6
#define DREAD_B6 (PINB & 0x40)
#else
#define DREAD_B6 # Pin B6 not supported on this MCU!
#endif
#ifdef PB7
#define DREAD_B7 (PINB & 0x80)
#else
#define DREAD_B7 # Pin B7 not supported on this MCU!
#endif
#ifdef PC0
#define DREAD_C0 (PINC & 0x01)
#else
#define DREAD_C0 # Pin C0 not supported on this MCU!
#endif
#ifdef PC1
#define DREAD_C1 (PINC & 0x02)
#else
#define DREAD_C1 # Pin C1 not supported on this MCU!
#endif
#ifdef PC2
#define DREAD_C2 (PINC & 0x04)
#else
#define DREAD_C2 # Pin C2 not supported on this MCU!
#endif
#ifdef PC3
#define DREAD_C3 (PINC & 0x08)
#else
#define DREAD_C3 # Pin C3 not supported on this MCU!
#endif
#ifdef PC4
#define DREAD_C4 (PINC & 0x10)
#else
#define DREAD_C4 # Pin C4 not supported on this MCU!
#endif
#ifdef PC5
#define DREAD_C5 (PINC & 0x20)
#else
#define DREAD_C5 # Pin C5 not supported on this MCU!
#endif
#ifdef PC6
#define DREAD_C6 (PINC & 0x40)
#else
#define DREAD_C6 # Pin C6 not supported on this MCU!
#endif
#ifdef PC7
#define DREAD_C7 (PINC & 0x80)
#else
#define DREAD_C7 # Pin C7 not supported on this MCU!
#endif
#ifdef PD0
#define DREAD_D0 (PIND & 0x01)
#else
#define DREAD_D0 # Pin D0 not supported on this MCU!
#endif
#ifdef PD1
#define DREAD_D1 (PIND & 0x02)
#else
#define DREAD_D1 # Pin D1 not supported on this MCU!
#endif
#ifdef PD2
#define DREAD_D2 (PIND & 0x04)
#else
#define DREAD_D2 # Pin D2 not supported on this MCU!
#endif
#ifdef PD3
#define DREAD_D3 (PIND & 0x08)
#else
#define DREAD_D3 # Pin D3 not supported on this MCU!
#endif
#ifdef PD4
#define DREAD_D4 (PIND & 0x10)
#else
#define DREAD_D4 # Pin D4 not supported on this MCU!
#endif
#ifdef PD5
#define DREAD_D5 (PIND & 0x20)
#else
#define DREAD_D5 # Pin D5 not supported on this MCU!
#endif
#ifdef PD6
#define DREAD_D6 (PIND & 0x40)
#else
#define DREAD_D6 # Pin D6 not supported on this MCU!
#endif
#ifdef PD7
#define DREAD_D7 (PIND & 0x80)
#else
#define DREAD_D7 # Pin D7 not supported on this MCU!
#endif
#endif // PIO_DREAD_H

View file

@ -1,249 +0,0 @@
/***
* dwrite.h
* This file is part of the PIO library.
* For license information see "pio.h" in the parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should be included directly. Use "pio.h" instead.
#endif
#ifndef PIO_DWRITE_H
#define PIO_DWRITE_H
#define dWrite(A, B) dWrite_(A, B)
#define dWrite_(A, B) DWRITE ## _ ## A ## _ ## B
#ifdef PA0
#define DWRITE_A0_1 PORTA |= 0x01
#define DWRITE_A0_0 PORTA &= 0xFE
#else
#define DWRITE_A0_1 # Pin A0 not supported on this MCU!
#define DWRITE_A0_0 DWRITE_A0_1
#endif
#ifdef PA1
#define DWRITE_A1_1 PORTA |= 0x02
#define DWRITE_A1_0 PORTA &= 0xFD
#else
#define DWRITE_A1_1 # Pin A1 not supported on this MCU!
#define DWRITE_A1_0 DWRITE_A1_1
#endif
#ifdef PA2
#define DWRITE_A2_1 PORTA |= 0x04
#define DWRITE_A2_0 PORTA &= 0xFB
#else
#define DWRITE_A2_1 # Pin A2 not supported on this MCU!
#define DWRITE_A2_0 DWRITE_A2_1
#endif
#ifdef PA3
#define DWRITE_A3_1 PORTA |= 0x08
#define DWRITE_A3_0 PORTA &= 0xF7
#else
#define DWRITE_A3_1 # Pin A3 not supported on this MCU!
#define DWRITE_A3_0 DWRITE_A3_1
#endif
#ifdef PA4
#define DWRITE_A4_1 PORTA |= 0x10
#define DWRITE_A4_0 PORTA &= 0xEF
#else
#define DWRITE_A4_1 # Pin A4 not supported on this MCU!
#define DWRITE_A4_0 DWRITE_A4_1
#endif
#ifdef PA5
#define DWRITE_A5_1 PORTA |= 0x20
#define DWRITE_A5_0 PORTA &= 0xDF
#else
#define DWRITE_A5_1 # Pin A5 not supported on this MCU!
#define DWRITE_A5_0 DWRITE_A5_1
#endif
#ifdef PA6
#define DWRITE_A6_1 PORTA |= 0x40
#define DWRITE_A6_0 PORTA &= 0xBF
#else
#define DWRITE_A6_1 # Pin A6 not supported on this MCU!
#define DWRITE_A6_0 DWRITE_A6_1
#endif
#ifdef PA7
#define DWRITE_A7_1 PORTA |= 0x80
#define DWRITE_A7_0 PORTA &= 0x7F
#else
#define DWRITE_A7_1 # Pin A7 not supported on this MCU!
#define DWRITE_A7_0 DWRITE_A7_1
#endif
#ifdef PB0
#define DWRITE_B0_1 PORTB |= 0x01
#define DWRITE_B0_0 PORTB &= 0xFE
#else
#define DWRITE_B0_1 # Pin B0 not supported on this MCU!
#define DWRITE_B0_0 DWRITE_B0_1
#endif
#ifdef PB1
#define DWRITE_B1_1 PORTB |= 0x02
#define DWRITE_B1_0 PORTB &= 0xFD
#else
#define DWRITE_B1_1 # Pin B1 not supported on this MCU!
#define DWRITE_B1_0 DWRITE_B1_1
#endif
#ifdef PB2
#define DWRITE_B2_1 PORTB |= 0x04
#define DWRITE_B2_0 PORTB &= 0xFB
#else
#define DWRITE_B2_1 # Pin B2 not supported on this MCU!
#define DWRITE_B2_0 DWRITE_B2_1
#endif
#ifdef PB3
#define DWRITE_B3_1 PORTB |= 0x08
#define DWRITE_B3_0 PORTB &= 0xF7
#else
#define DWRITE_B3_1 # Pin B3 not supported on this MCU!
#define DWRITE_B3_0 DWRITE_B3_1
#endif
#ifdef PB4
#define DWRITE_B4_1 PORTB |= 0x10
#define DWRITE_B4_0 PORTB &= 0xEF
#else
#define DWRITE_B4_1 # Pin B4 not supported on this MCU!
#define DWRITE_B4_0 DWRITE_B4_1
#endif
#ifdef PB5
#define DWRITE_B5_1 PORTB |= 0x20
#define DWRITE_B5_0 PORTB &= 0xDF
#else
#define DWRITE_B5_1 # Pin B5 not supported on this MCU!
#define DWRITE_B5_0 DWRITE_B5_1
#endif
#ifdef PB6
#define DWRITE_B6_1 PORTB |= 0x40
#define DWRITE_B6_0 PORTB &= 0xBF
#else
#define DWRITE_B6_1 # Pin B6 not supported on this MCU!
#define DWRITE_B6_0 DWRITE_B6_1
#endif
#ifdef PB7
#define DWRITE_B7_1 PORTB |= 0x80
#define DWRITE_B7_0 PORTB &= 0x7F
#else
#define DWRITE_B7_1 # Pin B7 not supported on this MCU!
#define DWRITE_B7_0 DWRITE_B7_1
#endif
#ifdef PC0
#define DWRITE_C0_1 PORTC |= 0x01
#define DWRITE_C0_0 PORTC &= 0xFE
#else
#define DWRITE_C0_1 # Pin C0 not supported on this MCU!
#define DWRITE_C0_0 DWRITE_C0_1
#endif
#ifdef PC1
#define DWRITE_C1_1 PORTC |= 0x02
#define DWRITE_C1_0 PORTC &= 0xFD
#else
#define DWRITE_C1_1 # Pin C1 not supported on this MCU!
#define DWRITE_C1_0 DWRITE_C1_1
#endif
#ifdef PC2
#define DWRITE_C2_1 PORTC |= 0x04
#define DWRITE_C2_0 PORTC &= 0xFB
#else
#define DWRITE_C2_1 # Pin C2 not supported on this MCU!
#define DWRITE_C2_0 DWRITE_C2_1
#endif
#ifdef PC3
#define DWRITE_C3_1 PORTC |= 0x08
#define DWRITE_C3_0 PORTC &= 0xF7
#else
#define DWRITE_C3_1 # Pin C3 not supported on this MCU!
#define DWRITE_C3_0 DWRITE_C3_1
#endif
#ifdef PC4
#define DWRITE_C4_1 PORTC |= 0x10
#define DWRITE_C4_0 PORTC &= 0xEF
#else
#define DWRITE_C4_1 # Pin C4 not supported on this MCU!
#define DWRITE_C4_0 DWRITE_C4_1
#endif
#ifdef PC5
#define DWRITE_C5_1 PORTC |= 0x20
#define DWRITE_C5_0 PORTC &= 0xDF
#else
#define DWRITE_C5_1 # Pin C5 not supported on this MCU!
#define DWRITE_C5_0 DWRITE_C5_1
#endif
#ifdef PC6
#define DWRITE_C6_1 PORTC |= 0x40
#define DWRITE_C6_0 PORTC &= 0xBF
#else
#define DWRITE_C6_1 # Pin C6 not supported on this MCU!
#define DWRITE_C6_0 DWRITE_C6_1
#endif
#ifdef PC7
#define DWRITE_C7_1 PORTC |= 0x80
#define DWRITE_C7_0 PORTC &= 0x7F
#else
#define DWRITE_C7_1 # Pin C7 not supported on this MCU!
#define DWRITE_C7_0 DWRITE_C7_1
#endif
#ifdef PD0
#define DWRITE_D0_1 PORTD |= 0x01
#define DWRITE_D0_0 PORTD &= 0xFE
#else
#define DWRITE_D0_1 # Pin D0 not supported on this MCU!
#define DWRITE_D0_0 DWRITE_D0_1
#endif
#ifdef PD1
#define DWRITE_D1_1 PORTD |= 0x02
#define DWRITE_D1_0 PORTD &= 0xFD
#else
#define DWRITE_D1_1 # Pin D1 not supported on this MCU!
#define DWRITE_D1_0 DWRITE_D1_1
#endif
#ifdef PD2
#define DWRITE_D2_1 PORTD |= 0x04
#define DWRITE_D2_0 PORTD &= 0xFB
#else
#define DWRITE_D2_1 # Pin D2 not supported on this MCU!
#define DWRITE_D2_0 DWRITE_D2_1
#endif
#ifdef PD3
#define DWRITE_D3_1 PORTD |= 0x08
#define DWRITE_D3_0 PORTD &= 0xF7
#else
#define DWRITE_D3_1 # Pin D3 not supported on this MCU!
#define DWRITE_D3_0 DWRITE_D3_1
#endif
#ifdef PD4
#define DWRITE_D4_1 PORTD |= 0x10
#define DWRITE_D4_0 PORTD &= 0xEF
#else
#define DWRITE_D4_1 # Pin D4 not supported on this MCU!
#define DWRITE_D4_0 DWRITE_D4_1
#endif
#ifdef PD5
#define DWRITE_D5_1 PORTD |= 0x20
#define DWRITE_D5_0 PORTD &= 0xDF
#else
#define DWRITE_D5_1 # Pin D5 not supported on this MCU!
#define DWRITE_D5_0 DWRITE_D5_1
#endif
#ifdef PD6
#define DWRITE_D6_1 PORTD |= 0x40
#define DWRITE_D6_0 PORTD &= 0xBF
#else
#define DWRITE_D6_1 # Pin D6 not supported on this MCU!
#define DWRITE_D6_0 DWRITE_D6_1
#endif
#ifdef PD7
#define DWRITE_D7_1 PORTD |= 0x80
#define DWRITE_D7_0 PORTD &= 0x7F
#else
#define DWRITE_D7_1 # Pin D7 not supported on this MCU!
#define DWRITE_D7_0 DWRITE_D7_1
#endif
#endif // PIO_DWRITE_H

View file

@ -1,78 +0,0 @@
/***
* impl0.h
* This file is part of the PIO library.
* For license information see "pio.h" in the super parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should be included directly. Use "pio.h" instead.
#endif
#ifndef F_CPU
#error F_CPU not defined!
#endif
#ifndef F_I2C
#ifndef PIO_DISABLE_I2C
#warning F_I2C not defined, I2C disabled.
#endif
#else
#include <stdlib.h>
// AVR TWI master transmitter status codes
#define TWS_START 0x08
#define TWS_REPEATED_START 0x10
#define TWS_ADDR_ACK 0x18
#define TWS_ADDR_NOT_ACK 0x20
#define TWS_DATA_ACK 0x28
#define TWS_DATA_NOT_ACK 0x30
#define TWS_ARB_LOST 0x38
// functions
void i2cInit(void);
void i2cBeginTransmission(uint8_t);
void i2cSend(uint8_t);
void i2cEndTransmission(void);
// error function pointer
void (*i2cError)(void) = NULL;
void i2cInit() {
// i2c clock speed, see SCL frequency formula in datasheet
uint16_t sp = F_CPU / F_I2C - 16;
uint16_t bp = sp;
while(sp > 510) {
TWSR++;
sp /= 4;
}
TWBR = bp / (1<<(2*(TWSR & 0x03)+1));
}
void i2cBeginTransmission(uint8_t addr) {
TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWSTA);
while (!(TWCR & _BV(TWINT)));
if((TWSR & 0xF8) != TWS_START)
i2cError();
TWDR = (addr & 0xFE) << 1;
TWCR = _BV(TWEN) | _BV(TWINT);
while (!(TWCR & _BV(TWINT)));
if((TWSR & 0xF8) != TWS_ADDR_ACK)
i2cError();
}
void i2cSend(uint8_t b) {
TWDR = b;
TWCR = _BV(TWEN) | _BV(TWINT);
while (!(TWCR & _BV(TWINT)));
if((TWSR & 0xF8) != TWS_DATA_ACK)
i2cError();
}
void i2cEndTransmission() {
TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWSTO);
while (TWCR & _BV(TWSTO));
}
#endif

View file

@ -1,22 +0,0 @@
/***
* mcus.h
* This file is part of the PIO library.
* For license information see "pio.h" in the parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should be included directly. Use "pio.h" instead.
#endif
#ifndef PIO_MCUS_H
#define PIO_MCUS_H
#include "mcus/atmega328p.h"
#include "mcus/atmega16.h"
#include "mcus/atmega1284.h"
#ifndef MCU
#error No compatible MCU header file found.
#endif
#endif // PIO_MCUS_H

View file

@ -1,17 +0,0 @@
/***
* atmega1284.h
* This file is part of the PIO library.
* For license information see "pio.h" in the super parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should not be included directly. Use "pio.h" instead.
#endif
#ifdef __AVR_ATmega1284__
#define MCU ATmega1284
#include "../i2c/impl0.h"
#endif

View file

@ -1,17 +0,0 @@
/***
* atmega16.h
* This file is part of the PIO library.
* For license information see "pio.h" in the super parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should not be included directly. Use "pio.h" instead.
#endif
#ifdef __AVR_ATmega16__
#define MCU ATmega16
#include "../i2c/impl0.h"
#endif

View file

@ -1,14 +0,0 @@
/***
* atmega328p.h
* This file is part of the PIO library.
* For license information see "pio.h" in the super parent directory.
*/
#if !defined(PIOLIB) || PIOLIB < 100
#error This file should not be included directly. Use "pio.h" instead.
#endif
#ifdef __AVR_ATmega328P__
#error Not implemented!
#endif

View file

@ -6,6 +6,7 @@ void testAll(void)
testBEBA1();
testDAC0();
testDAC1();
testMirror();
}
void testBEBA0(void)
@ -37,6 +38,8 @@ void testDAC0(void)
dac0.setValue(i);
_delay_ms(1);
}
_delay_ms(100);
dac0.setValue(0);
}
void testDAC1(void)
@ -46,4 +49,17 @@ void testDAC1(void)
dac1.setValue(i);
_delay_ms(1);
}
_delay_ms(100);
dac1.setValue(0);
}
void testMirror()
{
while(1)
{
dac0.setValue(adu.getValue(0));
dac1.setValue(adu.getValue(1));
beba0.writePortA(beba0.readPortB());
beba1.writePortA(sw.readPortB());
}
}

View file

@ -1,12 +1,13 @@
#ifndef SELFTEST_H
#define SELFTEST_H
#include "vars.h"
#include "global_vars.h"
void testAll(void);
void testBEBA0(void);
void testBEBA1(void);
void testDAC0(void);
void testDAC1(void);
void testMirror(void);
#endif // SELFTEST_H

30
spi.cpp
View file

@ -8,16 +8,11 @@ void SPI::init(void) const
{
// Konfiguriere SPI DDRs
dMode(SLSL, OUT);
dMode(MOSI, OUT);
dMode(MISO, IN);
dMode(SCLK, OUT);
DDRB |= _BV(SLSL) | _BV(MOSI) | _BV(SCLK);
DDRB &= ~_BV(MISO);
// Konfiguriere DMUX DDRs
dMode(DMUX1, OUT);
dMode(DMUX2, OUT);
dMode(DMUX3, OUT);
DDRD |= _BV(DMUX1) | _BV(DMUX2) | _BV(DMUX3);
// aktiviere SPI, Master Modus, SPI Modus 0
// F_SPI = F_CPU / 2 (prescaler 2)
@ -28,23 +23,12 @@ void SPI::init(void) const
setAdr(SPIADR::NONE);
}
/*void SPI::setFreq(uint32_t freq) const
{
}*/
void SPI::setAdr(uint8_t adr) const
{
dWrite(DMUX1, 0);
dWrite(DMUX2, 0);
dWrite(DMUX3, 0);
if(adr & 0x01)
dWrite(DMUX1, 1);
if(adr & 0x02)
dWrite(DMUX2, 1);
if(adr & 0x04)
dWrite(DMUX3, 1);
PORTD &= ~(_BV(DMUX1) | _BV(DMUX2) | _BV(DMUX3));
PORTD |= (adr & 0x01) ? _BV(DMUX1) : 0;
PORTD |= (adr & 0x02) ? _BV(DMUX2) : 0;
PORTD |= (adr & 0x04) ? _BV(DMUX3) : 0;
}
uint8_t SPI::pushByte(uint8_t b) const

17
spi.h
View file

@ -2,17 +2,17 @@
#define SPI_H
#include <util/delay.h>
#include <avr/io.h>
#include <stdint.h>
#include "pio.h"
#define SLSL B4
#define MOSI B5
#define MISO B6
#define SCLK B7
#define SLSL PB4
#define MOSI PB5
#define MISO PB6
#define SCLK PB7
#define DMUX1 D2
#define DMUX2 D3
#define DMUX3 D4
#define DMUX1 PD2
#define DMUX2 PD3
#define DMUX3 PD4
enum SPIADR {
AA0 = 0,
@ -29,7 +29,6 @@ class SPI
public:
SPI(void);
void init(void) const;
//void setFreq(uint32_t) const;
void setAdr(uint8_t) const;
uint8_t pushByte(uint8_t) const;