Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 111 → Rev 112

/Transportables_Koptertool/trunk/V-0.1/lcd.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/displ_val.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/F8X6.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/timer.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/rs232.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/display.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/motortest.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/menu.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/lcd.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/parameter.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/display.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/F8X6.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/displ_val.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/base64.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/parameter.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/timer.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/base64.lst
File deleted
/Transportables_Koptertool/trunk/V-0.1/rs232.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/motortest.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.d
File deleted
/Transportables_Koptertool/trunk/V-0.1/menu.d
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/F8X6.c
0,0 → 1,290
/*******************************************************************************
;
; taskit Rechnertechnik Berlin GmbH
; Kaiser-Friedrich-Straáe 51
; 1000 Berlin 12
; Tel. 030-3245836
; FAX 030-3232649
;
;
; Projekt :
;
; Datei :
;
; Funktion :
;
; Version :
;
; Letzte Änderung : 06/28/95 - 15:04:59
;
; Info :
;
*******************************************************************************/
#include <avr/pgmspace.h>
 
//Die Bytes gehören zu jeweils einer Spalte des Buchstabens
//D7 ist dabei das unterste Bit. Es handelt sich um einen DOS-Font !
//DOS-Zeichensatz
 
prog_uchar f8x6[ 256 ][ 6 ] =
{
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 0
{ 0x3E,0x5B,0x4F,0x5B,0x3E,0x00 }, // ASCII - 1
{ 0x3E,0x6B,0x4F,0x6B,0x3E,0x00 }, // ASCII - 2
{ 0x1C,0x3E,0x7C,0x3E,0x1C,0x00 }, // ASCII - 3
{ 0x18,0x3C,0x7E,0x3C,0x18,0x00 }, // ASCII - 4
{ 0x1C,0x57,0x7D,0x57,0x1C,0x00 }, // ASCII - 5
{ 0x1C,0x5E,0x7F,0x5E,0x1C,0x00 }, // ASCII - 6
{ 0x00,0x18,0x3C,0x18,0x00,0x00 }, // ASCII - 7
{ 0xFF,0xE7,0xC3,0xE7,0xFF,0x00 }, // ASCII - 8
{ 0x00,0x18,0x24,0x18,0x00,0x00 }, // ASCII - 9
{ 0xFF,0xE7,0xDB,0xE7,0xFF,0x00 }, // ASCII - 10
{ 0x30,0x48,0x3A,0x06,0x0E,0x00 }, // ASCII - 11
{ 0x26,0x29,0x79,0x29,0x26,0x00 }, // ASCII - 12
{ 0x40,0x7F,0x05,0x05,0x07,0x00 }, // ASCII - 13
{ 0x40,0x7F,0x05,0x25,0x3F,0x00 }, // ASCII - 14
{ 0x5A,0x3C,0xE7,0x3C,0x5A,0x00 }, // ASCII - 15
{ 0x7F,0x3E,0x1C,0x1C,0x08,0x00 }, // ASCII - 16
{ 0x08,0x1C,0x1C,0x3E,0x7F,0x00 }, // ASCII - 17
{ 0x14,0x22,0x7F,0x22,0x14,0x00 }, // ASCII - 18
{ 0x5F,0x5F,0x00,0x5F,0x5F,0x00 }, // ASCII - 19
{ 0x06,0x09,0x7F,0x01,0x7F,0x00 }, // ASCII - 20
{ 0x00,0x66,0x89,0x95,0x6A,0x00 }, // ASCII - 21
{ 0x60,0x60,0x60,0x60,0x60,0x60 }, // ASCII - 22
{ 0x94,0xA2,0xFF,0xA2,0x94,0x00 }, // ASCII - 23
{ 0x08,0x04,0x7E,0x04,0x08,0x00 }, // ASCII - 24
{ 0x10,0x20,0x7E,0x20,0x10,0x00 }, // ASCII - 25
{ 0x08,0x08,0x2A,0x1C,0x08,0x00 }, // ASCII - 26
{ 0x08,0x1C,0x2A,0x08,0x08,0x00 }, // ASCII - 27
{ 0x1E,0x10,0x10,0x10,0x10,0x00 }, // ASCII - 28
{ 0x0C,0x1E,0x0C,0x1E,0x0C,0x00 }, // ASCII - 29
{ 0x30,0x38,0x3E,0x38,0x30,0x00 }, // ASCII - 30
{ 0x06,0x0E,0x3E,0x0E,0x06,0x00 }, // ASCII - 31
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 32
{ 0x00,0x00,0x5F,0x00,0x00,0x00 }, // ASCII - 33
{ 0x00,0x07,0x00,0x07,0x00,0x00 }, // ASCII - 34
{ 0x14,0x7F,0x14,0x7F,0x14,0x00 }, // ASCII - 35
{ 0x24,0x2A,0x7F,0x2A,0x12,0x00 }, // ASCII - 36
{ 0x23,0x13,0x08,0x64,0x62,0x00 }, // ASCII - 37
{ 0x36,0x49,0x56,0x20,0x50,0x00 }, // ASCII - 38
{ 0x00,0x08,0x07,0x03,0x00,0x00 }, // ASCII - 39
{ 0x00,0x1C,0x22,0x41,0x00,0x00 }, // ASCII - 40
{ 0x00,0x41,0x22,0x1C,0x00,0x00 }, // ASCII - 41
{ 0x2A,0x1C,0x7F,0x1C,0x2A,0x00 }, // ASCII - 42
{ 0x08,0x08,0x3E,0x08,0x08,0x00 }, // ASCII - 43
{ 0x00,0x80,0x70,0x30,0x00,0x00 }, // ASCII - 44
{ 0x08,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 45
{ 0x00,0x00,0x60,0x60,0x00,0x00 }, // ASCII - 46
{ 0x20,0x10,0x08,0x04,0x02,0x00 }, // ASCII - 47
{ 0x3E,0x51,0x49,0x45,0x3E,0x00 }, // ASCII - 48
{ 0x00,0x42,0x7F,0x40,0x00,0x00 }, // ASCII - 49
{ 0x72,0x49,0x49,0x49,0x46,0x00 }, // ASCII - 50
{ 0x21,0x41,0x49,0x4D,0x33,0x00 }, // ASCII - 51
{ 0x18,0x14,0x12,0x7F,0x10,0x00 }, // ASCII - 52
{ 0x27,0x45,0x45,0x45,0x39,0x00 }, // ASCII - 53
{ 0x3C,0x4A,0x49,0x49,0x31,0x00 }, // ASCII - 54
{ 0x41,0x21,0x11,0x09,0x07,0x00 }, // ASCII - 55
{ 0x36,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 56
{ 0x46,0x49,0x49,0x29,0x1E,0x00 }, // ASCII - 57
{ 0x00,0x00,0x14,0x00,0x00,0x00 }, // ASCII - 58
{ 0x00,0x40,0x34,0x00,0x00,0x00 }, // ASCII - 59
{ 0x00,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 60
{ 0x14,0x14,0x14,0x14,0x14,0x00 }, // ASCII - 61
{ 0x00,0x41,0x22,0x14,0x08,0x00 }, // ASCII - 62
{ 0x02,0x01,0x59,0x09,0x06,0x00 }, // ASCII - 63
{ 0x3E,0x41,0x5D,0x59,0x4E,0x00 }, // ASCII - 64
{ 0x7C,0x12,0x11,0x12,0x7C,0x00 }, // ASCII - 65
{ 0x7F,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 66
{ 0x3E,0x41,0x41,0x41,0x22,0x00 }, // ASCII - 67
{ 0x7F,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 68
{ 0x7F,0x49,0x49,0x49,0x41,0x00 }, // ASCII - 69
{ 0x7F,0x09,0x09,0x09,0x01,0x00 }, // ASCII - 70
{ 0x3E,0x41,0x41,0x51,0x73,0x00 }, // ASCII - 71
{ 0x7F,0x08,0x08,0x08,0x7F,0x00 }, // ASCII - 72
{ 0x00,0x41,0x7F,0x41,0x00,0x00 }, // ASCII - 73
{ 0x20,0x40,0x41,0x3F,0x01,0x00 }, // ASCII - 74
{ 0x7F,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 75
{ 0x7F,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 76
{ 0x7F,0x02,0x1C,0x02,0x7F,0x00 }, // ASCII - 77
{ 0x7F,0x04,0x08,0x10,0x7F,0x00 }, // ASCII - 78
{ 0x3E,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 79
{ 0x7F,0x09,0x09,0x09,0x06,0x00 }, // ASCII - 80
{ 0x3E,0x41,0x51,0x21,0x5E,0x00 }, // ASCII - 81
{ 0x7F,0x09,0x19,0x29,0x46,0x00 }, // ASCII - 82
{ 0x26,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 83
{ 0x03,0x01,0x7F,0x01,0x03,0x00 }, // ASCII - 84
{ 0x3F,0x40,0x40,0x40,0x3F,0x00 }, // ASCII - 85
{ 0x1F,0x20,0x40,0x20,0x1F,0x00 }, // ASCII - 86
{ 0x3F,0x40,0x38,0x40,0x3F,0x00 }, // ASCII - 87
{ 0x63,0x14,0x08,0x14,0x63,0x00 }, // ASCII - 88
{ 0x03,0x04,0x78,0x04,0x03,0x00 }, // ASCII - 89
{ 0x61,0x59,0x49,0x4D,0x43,0x00 }, // ASCII - 90
{ 0x00,0x7F,0x41,0x41,0x41,0x00 }, // ASCII - 91
{ 0x02,0x04,0x08,0x10,0x20,0x00 }, // ASCII - 92
{ 0x00,0x41,0x41,0x41,0x7F,0x00 }, // ASCII - 93
{ 0x04,0x02,0x01,0x02,0x04,0x00 }, // ASCII - 94
{ 0x40,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 95
{ 0x00,0x03,0x07,0x08,0x00,0x00 }, // ASCII - 96
{ 0x20,0x54,0x54,0x78,0x40,0x00 }, // ASCII - 97
{ 0x7F,0x28,0x44,0x44,0x38,0x00 }, // ASCII - 98
{ 0x38,0x44,0x44,0x44,0x28,0x00 }, // ASCII - 99
{ 0x38,0x44,0x44,0x28,0x7F,0x00 }, // ASCII - 100
{ 0x38,0x54,0x54,0x54,0x18,0x00 }, // ASCII - 101
{ 0x00,0x08,0x7E,0x09,0x02,0x00 }, // ASCII - 102
{ 0x18,0xA4,0xA4,0x9C,0x78,0x00 }, // ASCII - 103
{ 0x7F,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 104
{ 0x00,0x44,0x7D,0x40,0x00,0x00 }, // ASCII - 105
{ 0x20,0x40,0x40,0x3D,0x00,0x00 }, // ASCII - 106
{ 0x7F,0x10,0x28,0x44,0x00,0x00 }, // ASCII - 107
{ 0x00,0x41,0x7F,0x40,0x00,0x00 }, // ASCII - 108
{ 0x7C,0x04,0x78,0x04,0x78,0x00 }, // ASCII - 109
{ 0x7C,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 110
{ 0x38,0x44,0x44,0x44,0x38,0x00 }, // ASCII - 111
{ 0xFC,0x18,0x24,0x24,0x18,0x00 }, // ASCII - 112
{ 0x18,0x24,0x24,0x18,0xFC,0x00 }, // ASCII - 113
{ 0x7C,0x08,0x04,0x04,0x08,0x00 }, // ASCII - 114
{ 0x48,0x54,0x54,0x54,0x24,0x00 }, // ASCII - 115
{ 0x04,0x04,0x3F,0x44,0x24,0x00 }, // ASCII - 116
{ 0x3C,0x40,0x40,0x20,0x7C,0x00 }, // ASCII - 117
{ 0x1C,0x20,0x40,0x20,0x1C,0x00 }, // ASCII - 118
{ 0x3C,0x40,0x30,0x40,0x3C,0x00 }, // ASCII - 119
{ 0x44,0x28,0x10,0x28,0x44,0x00 }, // ASCII - 120
{ 0x4C,0x90,0x90,0x90,0x7C,0x00 }, // ASCII - 121
{ 0x44,0x64,0x54,0x4C,0x44,0x00 }, // ASCII - 122
{ 0x00,0x08,0x36,0x41,0x00,0x00 }, // ASCII - 123
{ 0x00,0x00,0x77,0x00,0x00,0x00 }, // ASCII - 124
{ 0x00,0x41,0x36,0x08,0x00,0x00 }, // ASCII - 125
{ 0x02,0x01,0x02,0x04,0x02,0x00 }, // ASCII - 126
{ 0x3C,0x26,0x23,0x26,0x3C,0x00 }, // ASCII - 127
{ 0x1E,0xA1,0xA1,0x61,0x12,0x00 }, // ASCII - 128 80
{ 0x3A,0x40,0x40,0x20,0x7A,0x00 }, // ASCII - 129
{ 0x38,0x54,0x54,0x55,0x59,0x00 }, // ASCII - 130
{ 0x21,0x55,0x55,0x79,0x41,0x00 }, // ASCII - 131
{ 0x21,0x54,0x54,0x78,0x41,0x00 }, // ASCII - 132
{ 0x21,0x55,0x54,0x78,0x40,0x00 }, // ASCII - 133
{ 0x20,0x54,0x55,0x79,0x40,0x00 }, // ASCII - 134
{ 0x0C,0x1E,0x52,0x72,0x12,0x00 }, // ASCII - 135
{ 0x39,0x55,0x55,0x55,0x59,0x00 }, // ASCII - 136
{ 0x39,0x54,0x54,0x54,0x59,0x00 }, // ASCII - 137
{ 0x39,0x55,0x54,0x54,0x58,0x00 }, // ASCII - 138
{ 0x00,0x00,0x45,0x7C,0x41,0x00 }, // ASCII - 139
{ 0x00,0x02,0x45,0x7D,0x42,0x00 }, // ASCII - 140
{ 0x00,0x01,0x45,0x7C,0x40,0x00 }, // ASCII - 141
// { 0xF0,0x29,0x24,0x29,0xF0,0x00 }, // ASCII - 142 Ä
{ 0x79,0x14,0x12,0x14,0x79,0x00 }, // ASCII - 142 Ä korrigiert
{ 0xF0,0x28,0x25,0x28,0xF0,0x00 }, // ASCII - 143
{ 0x7C,0x54,0x55,0x45,0x00,0x00 }, // ASCII - 144 90
{ 0x20,0x54,0x54,0x7C,0x54,0x44 }, // ASCII - 145
{ 0x7C,0x0A,0x09,0x7F,0x49,0x41 }, // ASCII - 146
{ 0x32,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 147
{ 0x32,0x48,0x48,0x48,0x32,0x00 }, // ASCII - 148
{ 0x32,0x4A,0x48,0x48,0x30,0x00 }, // ASCII - 149
{ 0x3A,0x41,0x41,0x21,0x7A,0x00 }, // ASCII - 150
{ 0x3A,0x42,0x40,0x20,0x78,0x00 }, // ASCII - 151
{ 0x00,0x9D,0xA0,0xA0,0x7D,0x00 }, // ASCII - 152
{ 0x39,0x44,0x44,0x44,0x39,0x00 }, // ASCII - 153
{ 0x3D,0x40,0x40,0x40,0x3D,0x00 }, // ASCII - 154
{ 0x3C,0x24,0xFF,0x24,0x24,0x00 }, // ASCII - 155
{ 0x48,0x7E,0x49,0x43,0x66,0x00 }, // ASCII - 156
{ 0x2B,0x2F,0xFC,0x2F,0x2B,0x00 }, // ASCII - 157
{ 0xFF,0x09,0x29,0xF6,0x20,0x00 }, // ASCII - 158
{ 0xC0,0x88,0x7E,0x09,0x03,0x00 }, // ASCII - 159
{ 0x20,0x54,0x54,0x79,0x41,0x00 }, // ASCII - 160
{ 0x00,0x00,0x44,0x7D,0x41,0x00 }, // ASCII - 161
{ 0x30,0x48,0x48,0x4A,0x32,0x00 }, // ASCII - 162
{ 0x38,0x40,0x40,0x22,0x7A,0x00 }, // ASCII - 163
{ 0x00,0x7A,0x0A,0x0A,0x72,0x00 }, // ASCII - 164
{ 0x7D,0x0D,0x19,0x31,0x7D,0x00 }, // ASCII - 165
{ 0x26,0x29,0x29,0x2F,0x28,0x00 }, // ASCII - 166
{ 0x26,0x29,0x29,0x29,0x26,0x00 }, // ASCII - 167
{ 0x30,0x48,0x4D,0x40,0x20,0x00 }, // ASCII - 168
{ 0x38,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 169
{ 0x08,0x08,0x08,0x08,0x38,0x00 }, // ASCII - 170
{ 0x2F,0x10,0xC8,0xAC,0xBA,0x00 }, // ASCII - 171
{ 0x2F,0x10,0x28,0x34,0xFA,0x00 }, // ASCII - 172
{ 0x00,0x00,0x7B,0x00,0x00,0x00 }, // ASCII - 173
{ 0x08,0x14,0x2A,0x14,0x22,0x00 }, // ASCII - 174
{ 0x22,0x14,0x2A,0x14,0x08,0x00 }, // ASCII - 175
{ 0xAA,0x00,0x55,0x00,0xAA,0x00 }, // ASCII - 176
{ 0xAA,0x55,0xAA,0x55,0xAA,0x55 }, // ASCII - 177
{ 0x55,0xAA,0x55,0xAA,0x55,0xAA }, // ASCII - 178
{ 0x00,0x00,0x00,0xFF,0x00,0x00 }, // ASCII - 179
{ 0x10,0x10,0x10,0xFF,0x00,0x00 }, // ASCII - 180
{ 0x14,0x14,0x14,0xFF,0x00,0x00 }, // ASCII - 181
{ 0x10,0x10,0xFF,0x00,0xFF,0x00 }, // ASCII - 182
{ 0x10,0x10,0xF0,0x10,0xF0,0x00 }, // ASCII - 183
{ 0x14,0x14,0x14,0xFC,0x00,0x00 }, // ASCII - 184
{ 0x14,0x14,0xF7,0x00,0xFF,0x00 }, // ASCII - 185
{ 0x00,0x00,0xFF,0x00,0xFF,0x00 }, // ASCII - 186
{ 0x14,0x14,0xF4,0x04,0xFC,0x00 }, // ASCII - 187
{ 0x14,0x14,0x17,0x10,0x1F,0x00 }, // ASCII - 188
{ 0x10,0x10,0x1F,0x10,0x1F,0x00 }, // ASCII - 189
{ 0x14,0x14,0x14,0x1F,0x00,0x00 }, // ASCII - 190
{ 0x10,0x10,0x10,0xF0,0x00,0x00 }, // ASCII - 191
{ 0x00,0x00,0x00,0x1F,0x10,0x10 }, // ASCII - 192
{ 0x10,0x10,0x10,0x1F,0x10,0x10 }, // ASCII - 193
{ 0x10,0x10,0x10,0xF0,0x10,0x10 }, // ASCII - 194
{ 0x00,0x00,0x00,0xFF,0x10,0x10 }, // ASCII - 195
{ 0x10,0x10,0x10,0x10,0x10,0x10 }, // ASCII - 196
{ 0x10,0x10,0x10,0xFF,0x10,0x10 }, // ASCII - 197
{ 0x00,0x00,0x00,0xFF,0x14,0x14 }, // ASCII - 198
{ 0x00,0x00,0xFF,0x00,0xFF,0x10 }, // ASCII - 199
{ 0x00,0x00,0x1F,0x10,0x17,0x14 }, // ASCII - 200
{ 0x00,0x00,0xFC,0x04,0xF4,0x14 }, // ASCII - 201
{ 0x14,0x14,0x17,0x10,0x17,0x14 }, // ASCII - 202
{ 0x14,0x14,0xF4,0x04,0xF4,0x14 }, // ASCII - 203
{ 0x00,0x00,0xFF,0x00,0xF7,0x14 }, // ASCII - 204
{ 0x14,0x14,0x14,0x14,0x14,0x14 }, // ASCII - 205
{ 0x14,0x14,0xF7,0x00,0xF7,0x14 }, // ASCII - 206
{ 0x14,0x14,0x14,0x17,0x14,0x14 }, // ASCII - 207
{ 0x10,0x10,0x1F,0x10,0x1F,0x10 }, // ASCII - 208
{ 0x14,0x14,0x14,0xF4,0x14,0x14 }, // ASCII - 209
{ 0x10,0x10,0xF0,0x10,0xF0,0x10 }, // ASCII - 210
{ 0x00,0x00,0x1F,0x10,0x1F,0x10 }, // ASCII - 211
{ 0x00,0x00,0x00,0x1F,0x14,0x14 }, // ASCII - 212
{ 0x00,0x00,0x00,0xFC,0x14,0x14 }, // ASCII - 213
{ 0x00,0x00,0xF0,0x10,0xF0,0x10 }, // ASCII - 214
{ 0x10,0x10,0xFF,0x10,0xFF,0x10 }, // ASCII - 215
{ 0x14,0x14,0x14,0xFF,0x14,0x14 }, // ASCII - 216
{ 0x10,0x10,0x10,0x1F,0x00,0x00 }, // ASCII - 217
{ 0x00,0x00,0x00,0xF0,0x10,0x10 }, // ASCII - 218
{ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }, // ASCII - 219
{ 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0 }, // ASCII - 220
{ 0xFF,0xFF,0xFF,0x00,0x00,0x00 }, // ASCII - 221
{ 0x00,0x00,0x00,0xFF,0xFF,0xFF }, // ASCII - 222
{ 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F }, // ASCII - 223
{ 0x38,0x44,0x44,0x38,0x44,0x00 }, // ASCII - 224
{ 0x7C,0x2A,0x2A,0x3E,0x14,0x00 }, // ASCII - 225
{ 0x7E,0x02,0x02,0x06,0x06,0x00 }, // ASCII - 226
{ 0x02,0x7E,0x02,0x7E,0x02,0x00 }, // ASCII - 227
{ 0x63,0x55,0x49,0x41,0x63,0x00 }, // ASCII - 228
{ 0x38,0x44,0x44,0x3C,0x04,0x00 }, // ASCII - 229
{ 0x40,0x7E,0x20,0x1E,0x20,0x00 }, // ASCII - 230
{ 0x06,0x02,0x7E,0x02,0x02,0x00 }, // ASCII - 231
{ 0x99,0xA5,0xE7,0xA5,0x99,0x00 }, // ASCII - 232
{ 0x1C,0x2A,0x49,0x2A,0x1C,0x00 }, // ASCII - 233
{ 0x4C,0x72,0x01,0x72,0x4C,0x00 }, // ASCII - 234
{ 0x30,0x4A,0x4D,0x4D,0x30,0x00 }, // ASCII - 235
{ 0x30,0x48,0x78,0x48,0x30,0x00 }, // ASCII - 236
{ 0xBC,0x62,0x5A,0x46,0x3D,0x00 }, // ASCII - 237
{ 0x3E,0x49,0x49,0x49,0x00,0x00 }, // ASCII - 238
{ 0x7E,0x01,0x01,0x01,0x7E,0x00 }, // ASCII - 239
{ 0x2A,0x2A,0x2A,0x2A,0x2A,0x00 }, // ASCII - 240
{ 0x44,0x44,0x5F,0x44,0x44,0x00 }, // ASCII - 241
{ 0x40,0x51,0x4A,0x44,0x40,0x00 }, // ASCII - 242
{ 0x40,0x44,0x4A,0x51,0x40,0x00 }, // ASCII - 243
{ 0x00,0x00,0xFF,0x01,0x03,0x00 }, // ASCII - 244
{ 0xE0,0x80,0xFF,0x00,0x00,0x00 }, // ASCII - 245
{ 0x08,0x08,0x6B,0x6B,0x08,0x08 }, // ASCII - 246
{ 0x36,0x12,0x36,0x24,0x36,0x00 }, // ASCII - 247
{ 0x06,0x0F,0x09,0x0F,0x06,0x00 }, // ASCII - 248
{ 0x00,0x00,0x18,0x18,0x00,0x00 }, // ASCII - 249
{ 0x00,0x00,0x10,0x10,0x00,0x00 }, // ASCII - 250
{ 0x30,0x40,0xFF,0x01,0x01,0x00 }, // ASCII - 251
{ 0x00,0x1F,0x01,0x01,0x1E,0x00 }, // ASCII - 252
{ 0x00,0x19,0x1D,0x17,0x12,0x00 }, // ASCII - 253
{ 0x00,0x3C,0x3C,0x3C,0x3C,0x00 }, // ASCII - 254
{ 0x00,0x00,0x00,0x00,0x00,0x00 } // ASCII - 255
};
 
/************************ E n d o f F i l e ****************************/
/Transportables_Koptertool/trunk/V-0.1.1/MMT.hex
0,0 → 1,728
:100000000C94E3060C9400070C9400070C94000772
:100010000C9400070C9400070C9400070C94000744
:100020000C9400070C9400070C94F1120C94000738
:100030000C9400070C9497120C9400070C94000782
:100040000C9400070C9400070C9400070C94000714
:100050000C940007202020202020000D0A54696DF8
:10006000656F75742100446973706C6179000000DC
:10007000000000003E5B4F5B3E003E6B4F6B3E005E
:100080001C3E7C3E1C00183C7E3C18001C577D57D3
:100090001C001C5E7F5E1C0000183C180000FFE77F
:1000A000C3E7FF00001824180000FFE7DBE7FF00AC
:1000B00030483A060E00262979292600407F05059A
:1000C0000700407F05253F005A3CE73C5A007F3E31
:1000D0001C1C0800081C1C3E7F0014227F221400F8
:1000E0005F5F005F5F0006097F017F000066899502
:1000F0006A0060606060606094A2FFA294000804DF
:100100007E04080010207E20100008082A1C080029
:10011000081C2A0808001E10101010000C1E0C1ECF
:100120000C0030383E383000060E3E0E060000004F
:100130000000000000005F00000000070007000052
:10014000147F147F1400242A7F2A120023130864CA
:100150006200364956205000000807030000001CCA
:10016000224100000041221C00002A1C7F1C2A00A2
:1001700008083E08080000807030000008080808E1
:1001800008000000606000002010080402003E51DA
:1001900049453E0000427F400000724949494600FF
:1001A0002141494D33001814127F10002745454561
:1001B00039003C4A494931004121110907003649BB
:1001C00049493600464949291E0000001400000034
:1001D00000403400000000081422410014141414DC
:1001E00014000041221408000201590906003E4192
:1001F0005D594E007C1211127C007F49494936003E
:100200003E41414122007F4141413E007F494949F1
:1002100041007F09090901003E41415173007F08F7
:1002200008087F0000417F4100002040413F01005D
:100230007F08142241007F40404040007F021C02A2
:100240007F007F0408107F003E4141413E007F094E
:10025000090906003E4151215E007F091929460027
:1002600026494949320003017F0103003F404040D5
:100270003F001F2040201F003F4038403F006314D4
:10028000081463000304780403006159494D4300D6
:10029000007F41414100020408102000004141411B
:1002A0007F0004020102040040404040400000037F
:1002B000070800002054547840007F284444380048
:1002C000384444442800384444287F003854545467
:1002D000180000087E09020018A4A49C78007F087A
:1002E0000404780000447D4000002040403D0000B0
:1002F0007F102844000000417F4000007C04780407
:1003000078007C0804047800384444443800FC1821
:100310002424180018242418FC007C080404080075
:1003200048545454240004043F4424003C404020DA
:100330007C001C2040201C003C4030403C004428F5
:10034000102844004C9090907C004464544C44002D
:100350000008364100000000770000000041360828
:1003600000000201020402003C2623263C001EA1DC
:10037000A16112003A4040207A0038545455590087
:100380002155557941002154547841002155547824
:1003900040002054557940000C1E5272120039550D
:1003A000555559003954545459003955545458002E
:1003B0000000457C41000002457D42000001457C73
:1003C0004000791412147900F0282528F0007C549C
:1003D000554500002054547C54447C0A097F49410F
:1003E000324949493200324848483200324A484886
:1003F00030003A4141217A003A4240207800009D85
:10040000A0A07D003944444439003D4040403D00B7
:100410003C24FF242400487E494366002B2FFC2FF8
:100420002B00FF0929F62000C0887E090300205414
:10043000547941000000447D41003048484A320070
:10044000384040227A00007A0A0A72007D0D193184
:100450007D002629292F2800262929292600304811
:100460004D4020003808080808000808080838002F
:100470002F10C8ACBA002F102834FA0000007B00FF
:10048000000008142A14220022142A140800AA00CA
:100490005500AA00AA55AA55AA5555AA55AA55AA63
:1004A000000000FF0000101010FF0000141414FFE3
:1004B00000001010FF00FF001010F010F0001414E6
:1004C00014FC00001414F700FF000000FF00FF0000
:1004D0001414F404FC00141417101F0010101F1043
:1004E0001F001414141F0000101010F00000000072
:1004F000001F10101010101F1010101010F010100E
:10050000000000FF1010101010101010101010FF3D
:100510001010000000FF14140000FF00FF10000086
:100520001F1017140000FC04F414141417101714EF
:100530001414F404F4140000FF00F7141414141439
:1005400014141414F700F7141414141714141010BE
:100550001F101F10141414F414141010F010F010C5
:1005600000001F101F100000001F1414000000FCEA
:1005700014140000F010F0101010FF10FF101414ED
:1005800014FF14141010101F0000000000F01010D1
:10059000FFFFFFFFFFFFF0F0F0F0F0F0FFFFFF00C4
:1005A0000000000000FFFFFF0F0F0F0F0F0F384478
:1005B000443844007C2A2A3E14007E0202060600CB
:1005C000027E027E02006355494163003844443C88
:1005D0000400407E201E200006027E02020099A533
:1005E000E7A599001C2A492A1C004C7201724C0094
:1005F000304A4D4D3000304878483000BC625A4691
:100600003D003E49494900007E0101017E002A2A41
:100610002A2A2A0044445F44440040514A4440008E
:1006200040444A5140000000FF010300E080FF0009
:10063000000008086B6B0808361236243600060FD7
:10064000090F06000000181800000000101000003C
:100650003040FF010100001F01011E0000191D179D
:100660001200003C3C3C3C000000000000004D6FCC
:1006700064206279204D696B656C6A6F2030352F7C
:1006800030380020202053657474696E67730D0A3A
:1006900000202020446562756720446174656E0DFA
:1006A0000A002020204D6F746F72746573740D0AF8
:1006B00000202020506172616D657465720D0A0022
:1006C000202020446973706C61790D0A0020204855
:1006D000617570746D656EFC202856302E312E3198
:1006E000290D0A00506F727461626C6573204B6F44
:1006F00070746572746F6F6C0D0A002A00200054CC
:1007000061737465206472FC636B656E0D0A00434F
:100710006F6E66696720202020004368616E6E65F9
:100720006C73202000537469636B2020202020000C
:10073000486F6568652020202020004779726F206F
:100740002020202020004C6F6F70696E67202020D1
:100750000043616D6572612020202000536F6E732D
:10076000746967657320005573657220202020200E
:100770002000436F75706C696E67202000436F6EB8
:1007800066696728322920004C6F6F70696E677345
:100790006574000202020202020202000404040460
:1007A00004040303030808080805050808080005F1
:1007B000090909090707070707070606060A0A06BF
:1007C000060505050909090900070B0B0B0B0C0CA5
:1007D0000C0C0C0C0C0C01080201080201080201AF
:1007E00008020108020108020108020108020000D3
:1007F0000000FF0400FF0400FF0400FF04003204B7
:1008000000FF040006030040030014030020082139
:10081000FA0800320800FF0800000500000500FA91
:100820000800FA0800FA0800010000FF0500FF09AF
:1008300000FF0900FF0900FF0900FF0700FA070099
:10084000FA0700FA0700190700FF0600FA0600FA87
:100850000600FF0A00FF0A00FA0600FA0600FA0581
:1008600000FA0500FF0500FF0900FF0900FF09006D
:10087000FF09000001000107000000000000000067
:100880000000000000000000000000000000000068
:10089000000000000000000000000000004C6F6F2E
:1008A000702075702020202020202020004C6F6FA9
:1008B0007020646F776E092020202000004C6F6F3D
:1008C00070206C656674202020202020004C6F6F03
:1008D0007020726967687420202020200048F66824
:1008E000656E7265676C6572202020200048F6688E
:1008F000656E736368616C74657220200048656181
:1009000064686F6C6409090000000000004B6F6DA3
:10091000706173730909000000000000004B6F6DE7
:1009200070617373466978090900000000475053ED
:100930000909090000000000000000000041636890
:1009400073656E6B6F70706C756E672000447265B6
:10095000687261746509090000000000004E696357
:100960006B202020202020202020202000526F6C8F
:100970006C20202020202020202020200047617390
:1009800020202020202020202020202000476965D2
:1009900072090909000000000000000000506F7497
:1009A00069310909090000000000000000506F745F
:1009B00069320909090000000000000000506F744E
:1009C00069330909090000000000000000506F743D
:1009D00069340909090000000000000000436F6E3F
:1009E00066696709090900000000000000486F659A
:1009F00068655F4D696E476173202020004C756605
:100A000074647275636B5F4420202020004D617810
:100A1000486F6568652020202020202000486F65F1
:100A200068655F50202020202020202000486F652E
:100A300068655F56657273746165726B00486F65B7
:100A400068655F4143435F5769726B2E0053746959
:100A5000636B5F50202020202020202000537469E9
:100A6000636B5F4420202020202020200047696500
:100A7000725F50202020202020202020004761731A
:100A80005F4D696E202020202020202000476173C8
:100A90005F4D61782020202020202020004779729F
:100AA0006F41636346616B746F720900004B6F6D39
:100AB000706173735769726B756E67200047797246
:100AC0006F5F5020090900000000000000477972A4
:100AD0006F5F4909090900000000000000556E74AD
:100AE00065727370616E6E756E672020004E6F7454
:100AF000476173090909000000000000004E6F748F
:100B00004761735A65697420202020200055666F64
:100B10004175737269636874756E672000495F463A
:100B2000616B746F72202020202020200055736597
:100B300072506172616D31090900000000557365E2
:100B400072506172616D32090900000000557365D1
:100B500072506172616D33090900000000557365C0
:100B600072506172616D34090900000000536572B2
:100B7000766F4E69636B4374726C09000053657243
:100B8000766F4E69636B436F6D7009000053657239
:100B9000766F4E69636B4D696E0900000053657294
:100BA000766F4E69636B4D61780900000053657282
:100BB000766F4E69636B526566727368004C6F6F37
:100BC000704761734C696D6974090000004C6F6F68
:100BD000705468726573686F6C640900004C6F6FC5
:100BE00070487973746572657365090000416368C4
:100BF000734B6F70706C756E67090000004163681D
:100C000073476567656E4B6F70706C2E0057696E29
:100C10006B6C556D7363686C4E69636B0057696EDE
:100C20006B6C556D7363686C526F6C6C00477972B6
:100C30006F4163634162676C656963680044726910
:100C400066746B6F6D700909000000000044796ED6
:100C5000616D696353746162696C69740055736591
:100C600072506172616D35090900000000557365AD
:100C700072506172616D360909000000005573659C
:100C800072506172616D370909000000005573658B
:100C900072506172616D380909000000004C6F6F7D
:100CA00070436F6E66696709090000000053657242
:100CB000766F4E69636B436F6D70496E000D0A4E1F
:100CC00069636874206765737065696368657274C9
:100CD000000D0A506172616D6574657220676573FD
:100CE0007065696368657274000D0A2D2D2D3E00D4
:100CF000506172616D6574657220737065696368B7
:100D000065726E3F0D0A20206A610D0A20206E6513
:100D1000696E0054696D656F75740020353A0D0A6F
:100D20000020343A0D0A0020333A0D0A0020323AEE
:100D30000D0A0020313A0D0A004C616465205061B3
:100D400072616D657465720D0A002D002D002D0015
:100D5000457869740D0A00526563687465636B0DAC
:100D60000A004C696E69650D0A004F7269656E7400
:100D7000696572756E670D0A000D0A0045696E732C
:100D800074656C6C756E67656E3A0D0A00202020E4
:100D90002020202020202020202020202020202053
:100DA00020000D0A54696D656F757421000D0A5499
:100DB000696D656F7574210044656275672D4469BE
:100DC00073706C61790011241FBECFE5D8E0DEBFDF
:100DD000CDBF10E0A0E6B0E0ECE6FDE202C0059079
:100DE0000D92A036B107D9F717E0A0E6B0E001C038
:100DF0001D92A03DB107E1F70E94FE0D0C94B516BF
:100E00000C940000782F52E060E026C0E52FFF2709
:100E1000E951FB4F21812D5332813D5343814D5385
:100E20005C5FDC01AD59BB4F80818D53880F880F0B
:100E3000922F92959F70892B8C932295207F832FE0
:100E400086958695282BFD0121833295330F330F2C
:100E5000307C342B32836D5F862F99275717B0F281
:100E600008950F931F93B82F809163048093E70434
:100E7000809164048093E804809165048093E90480
:100E8000A3E073E035C0E72FFF27ED59FB4F8081CA
:100E9000418162817D5FEA2FFF27E951FB4F282FB7
:100EA00026952695235C208355279927837090707B
:100EB00024E0880F991F2A95E1F79A0104E03695FE
:100EC00027950A95E1F7822B835C81834F705070E0
:100ED000440F551F440F551F862F82958695869582
:100EE0008370842B835C82836F73635C6383AC5FEA
:100EF0007B1748F290E020E030E008C0E92FFF27A0
:100F0000E951FB4F8081280F311D9F5F9A17B1F780
:100F10003F70EA2FFF27E951FB4FC90136E0969554
:100F200087953A95E1F7835C80832F73235C218357
:100F30008DE0828313820A2F0D5F10E008C0E12F3D
:100F4000FF27E951FB4F80810E94E3121F5F1017BA
:100F5000B1F71F910F9108951F9384E180936B0562
:100F60000E94BE12833221F080916B058823C1F765
:100F700080916B05882319F481E090E017C00E94EE
:100F8000BE128093E70411E00AC00E94BE12E12F56
:100F9000FF27E951FB4F80831F5F17FD1FE78D304F
:100FA000A1F7812F0E94020780E090E01F91089531
:100FB0001F93CF93DF93CDB7DEB761970FB6F89449
:100FC000DEBF0FBECDBF182F83E28093630481E69E
:100FD0008093640480936504109366041092670400
:100FE0001092680486E00E9431070E94AC0780914D
:100FF000E8048134D1F7E3E6F4E0DE011196819153
:101000008D9384E0E337F807D1F7198A177020E051
:10101000AE014F5F5F4F612F80E00E94FC0A619636
:101020000FB6F894DEBF0FBECDBFDF91CF911F91F9
:1010300008959F92AF92BF92CF92DF92EF92FF926C
:101040000F931F93CF93DF93CDB7DEB761970FB6A2
:10105000F894DEBF0FBECDBF0E945A099924A92C77
:10106000BB2453E0AA0CBB1C5A95E1F7FA2C00E014
:1010700010E08F2D800F0E94D8070F5F1F4F0830A0
:101080001105B9F70E94AC078091E804843489F512
:101090007501EE0CFF1C85E694E0E80EF91ECC24E9
:1010A000DD248E010F5F1F4FF70120818181992779
:1010B000982F88274AE050E0B801820F911D0E94C6
:1010C000271620E044E550E06C2D8EE00E94C60A11
:1010D00020E0A8016C2D8EE00E94FC0A0894C11C3F
:1010E000D11C82E090E0E80EF91E98E0C916D10408
:1010F000C1F680916E05882329F280916E058130BA
:1011000009F4939480916E05823009F49A94809149
:101110006E05883019F0E3E09E22A1CF61960FB6EC
:10112000F894DEBF0FBECDBFDF91CF911F910F911D
:10113000FF90EF90DF90CF90BF90AF909F90089579
:101140001F9393E29093630491E69093640498E66E
:10115000909365048093660410926704109268046B
:1011600086E00E94310710E00E94AC07813009F44C
:101170001AE01F5F8091E8048053853018F01A3020
:1011800098F304C080E090E01A3010F081E090E025
:101190001F9108951F93CF93DF93CDB7DEB72A97A2
:1011A0000FB6F894DEBF0FBECDBF0E945A0960E0B3
:1011B00086E690E00E94980A80916E058823E1F708
:1011C0000E94A008813069F460E08BE590E00E9405
:1011D000980A88EC80936B0580916B05882369F1F0
:1011E000FBCF1091E80419831A8220E0AE014F5F13
:1011F0005F4F60E08AE00E94FC0A1F5F20E043E648
:1012000054E0612F80E00E94FC0A8AE080936B0525
:1012100080916B058823E1F780916E05813011F490
:101220000E94A00880916E05823011F40E94A008EF
:1012300080916E05843009F0BFCF2A960FB6F894DE
:10124000DEBF0FBECDBFDF91CF911F910895C4982F
:101250008FB9779BFECF8EB18EB9C49A08951F9334
:10126000CF93DF93E2E6F0E0119284E0E236F807F4
:10127000D9F710EBC398812F0E94270980E10E94C3
:101280002709809161000E942709C39AC0E0D0E03D
:1012900080E00E9427092196C038D105C9F71F5F59
:1012A000183B41F71092690510926A05DF91CF91C2
:1012B0001F9108950E942F09089583E397E00197F5
:1012C000F1F708950F931F93CF93DF938C01C0E044
:1012D000D0E003C00E945D092196C017D107D1F765
:1012E000DF91CF911F910F9108951092690510928F
:1012F0006A058FEF87BB8EE58DB9C49AC2988AE0E4
:1013000090E00E946209C29AC498C39880E40E9447
:10131000270980916100882329F481EA0E94270926
:1013200080EC04C080EA0E94270988EC0E9427090B
:1013300086EA0E94270982EA0E9427098FE20E941A
:10134000270988EF0E94270980E00E94270987E289
:101350000E94270981E80E94270986E10E94270947
:101360008CEA0E94270980E00E9427098FEA0E94E8
:1013700027090E942F090895FF920F931F938C0154
:10138000F62EC398880F892F881F990B9195805549
:101390000E942709809161000F77080F802F8295A6
:1013A0008F70805F0E942709802F8F700E9427090D
:1013B000C39A8F2D0E9427091F910F91FF900895C6
:1013C000EF92FF920F931F93CF93DF93C0E0D0E093
:1013D00002E610E032EEE32E30E0F32EF7018191C9
:1013E0007F01F801808361918F01CE010E94BC09C9
:1013F0002196F3E0C038DF0789F702EE13E0F80129
:1014000011928F0160E0CE010E94BC092196F4E0A8
:10141000C030DF07A1F7DF91CF911F910F91FF90AF
:10142000EF900895CF92DF92EF92FF920F931F9368
:10143000CF93DF93D22E4F3D81F0403E38F4463DAE
:10144000B1F04C3DB1F0443CA9F40FC0463F49F027
:101450004C3F49F0443E71F402C041EE0BC044E8F9
:1014600009C044E907C041E805C04EE803C049E9A6
:1014700001C04AE9062F11271695102F002717954E
:10148000079526E0829FC0011124080F191F1370D1
:10149000429F700111248EE690E0E80EF91ECC24E4
:1014A000E801CE59DF4FF7019491F2E0DF16A1F089
:1014B000FD1530F0DD2059F081E0D816B1F409C0F7
:1014C000E3E0DE1661F0F4E0DF1679F40AC09883F9
:1014D0000CC08881892B08C08881892705C0888134
:1014E00002C088819095892388836991C8010E94F0
:1014F000BC09C3940894E11CF11C0F5F1F4F86E0E8
:10150000C81689F6DF91CF911F910F91FF90EF9050
:10151000DF90CF90089580916A058F5F80936A0570
:10152000883028F00E94E00987E080936A050895DA
:101530001F93CF93DF93EC01162F20C04032A0F011
:101540002196212F60916A05809169050E94120AF7
:10155000809169058F5F80936905853178F01092DD
:1015600069050E948B0A0AC04A3029F04D3029F4DF
:101570001092690502C00E948B0A2196FE014491D7
:101580004423E1F6DF91CF911F910895809369057F
:1015900060936A05622FCA010E94980A08951F93FA
:1015A000CF93DF93EC01162F20C04032A0F021969C
:1015B000212F60916A05809169050E94120A80912D
:1015C00069058F5F80936905853178F01092690510
:1015D0000E948B0A0AC04A3029F04D3029F410923B
:1015E000690502C00E948B0A219648814423E9F6CE
:1015F000DF91CF911F9108958093690560936A05EB
:10160000622FCA010E94CF0A0895982F87FD39C022
:101610006034B8F5862F869586958695282F3327D2
:101620003695322F222737952795290F311D677060
:1016300081E090E001C0880F6A95EAF7682F337067
:10164000413061F0413018F04230A1F40DC0F90191
:10165000EE59FF4F8081609586230BC0F901EE594A
:10166000FF4F8081862B05C0F901EE59FF4F808125
:1016700086278083F901EE59FF4F6081C9010E94DE
:10168000BC0908952F923F924F925F926F927F9282
:101690008F929F92AF92BF92CF92DF92EF92FF9282
:1016A0000F931F93CF93DF93CDB7DEB728970FB675
:1016B000F894DEBF0FBECDBF8D83162F0E83682E2C
:1016C0007724862E9924842F99279C838B838619CF
:1016D0009709E22FFF27FA83E9839F012819390927
:1016E00097FF04C0FFEF2F2E3F2E07C040E050E0D1
:1016F000009711F041E050E01A0137FF04C0EFEF0E
:101700004E2E5E2E08C040E050E02115310511F04C
:1017100041E050E02A016C0197FF04C0D094C194CD
:10172000D108D394790137FF04C0F094E194F10813
:10173000F3944E81682D862D0E94050BEC14FD0458
:101740007CF5C60162E070E00E948E1644275527A2
:10175000461B570B58874F83A22CB62CB20C5D81C9
:10176000052F112717C08F8198858E0D9F1D988793
:101770008F831816190634F4840C951C8C199D0956
:1017800098878F834E81682D8B2D0E94050B020D4B
:10179000131DBA0CEB81FC810E171F0721F72DC01A
:1017A000C70162E070E00E948E1644275527461B51
:1017B000570B58874F83A42CB82CB40C012F11273A
:1017C00017C08F8198858C0D9D1D98878F83181663
:1017D000190634F4620C731C8E199F0998878F8345
:1017E0004E816B2D862D0E94050B040D151DBA0C24
:1017F000E981FA810E171F0721F728960FB6F89492
:10180000DEBF0FBECDBFDF91CF911F910F91FF9033
:10181000EF90DF90CF90BF90AF909F908F907F9090
:101820006F905F904F903F902F900895BF92CF920E
:10183000DF92EF92FF920F931F93CF93DF93182FB6
:10184000B02E87FD1FE7603408F06FE37727CB01E8
:10185000820F911D9C01812F840F912D911D6C0190
:1018600091E8C916D10418F0B0E8CB2ED12C79013B
:101870002134310518F0A0E4EA2EF12CEB0108C068
:101880000B2D2C2F4C2D6C2F812F0E94420B21965B
:10189000EC16FD06A8F7DF91CF911F910F91FF90F5
:1018A000EF90DF90CF90BF900895CF92DF92EF92AC
:1018B000FF920F931F93CF93DF93D82EC02E87FFF5
:1018C00002C08FE7D82E162F603408F01FE3812F57
:1018D000820F912D911DEC018D2D840F912D911D65
:1018E0007C0191E8E916F10418F000E8E02EF12CF3
:1018F0000C2D212F4E2D612F8D2D0E94420BC134B6
:10190000D10510F0C0E4D0E00C2D2C2F4E2D612F0E
:101910008E2D0E94420B2C2F4D2D6C2F8E2D0E9450
:10192000420B212F4D2D6C2F8D2D0E94420BDF91EC
:10193000CF911F910F91FF90EF90DF90CF9008957E
:101940002F923F924F925F926F927F928F929F92CF
:10195000AF92BF92CF92DF92EF92FF920F931F93BD
:10196000CF93DF93CDB7DEB724970FB6F894DEBFE1
:101970000FBECDBF8C016B017A01A22E21E030E0B9
:10198000241B350B3C832B83CA01880F991F6624C7
:101990007724681A790A462E502E640F4A2D802F1C
:1019A0000E94050B6C2D6E194A2D802F0E94050B8D
:1019B0004A2D6C2D802F8E0D0E94050B4A2D6C2D0B
:1019C000802F8E190E94050B4701222433241A828E
:1019D000198258C08B819C8197FD0BC008948108A7
:1019E0009108E2E0F0E06E0E7F1E860D971D9C834D
:1019F0008B830894211C311C29813A812E5F3F4F33
:101A00003A8329838B819C810196820F931F9C834B
:101A10008B83142D180DD52CD20C4A2D612F8D2DB2
:101A20000E94050BE52CE2184A2D612F8E2D0E9495
:101A3000050B142D18194A2D612F8D2D0E94050BB1
:101A40004A2D612F8E2D0E94050B142D120DE52CB1
:101A5000E80C4A2D612F8E2D0E94050B952D9819AB
:101A6000092F4A2D612F892F0E94050B142D121961
:101A70004A2D612F8E2D0E94050B4A2D612F802F3C
:101A80000E94050B281439040CF4A4CF24960FB639
:101A9000F894DEBF0FBECDBFDF91CF911F910F91A4
:101AA000FF90EF90DF90CF90BF90AF909F908F907E
:101AB0007F906F905F904F903F902F9008952F925E
:101AC0003F924F925F926F927F928F929F92AF92CE
:101AD000BF92CF92DF92EF92FF920F931F93CF931B
:101AE000DF936B017A0151E0A52EB12CAE18BF082F
:101AF0009701220F331F88249924821A930A662E95
:101B0000782E262F2E196E0D01E0482F0E94420BD1
:101B1000472D4E192C2D6C2D872D8E0D0E94420BBA
:101B2000E70144245524222433243AC0B7FC07C0DB
:101B3000219782E090E0880E991EA80CB91C0894A9
:101B4000411C511C82E090E0280E391E0894A11C13
:101B5000B11CA20CB31C1C2F662D6C0FE72CE418D3
:101B6000D72CD40C01E0262F4E2D8D2D0E94420B38
:101B7000662D6C1B262F4E2D8D2D0E94420B662D3F
:101B8000640DE72CEC1A170D262F4E2D812F0E9485
:101B9000420B662D6419262F4E2D812F0E94420B79
:101BA0004C165D061CF2DF91CF911F910F91FF90B3
:101BB000EF90DF90CF90BF90AF909F908F907F90ED
:101BC0006F905F904F903F902F900895A2E0B0E00B
:101BD0000E94A116802D992780936100089581E0CD
:101BE00021E030E0D901082E0E94A91680E02F5F85
:101BF0003F4FD901082E0E94A91608958FEF8BBB85
:101C000083E488BB8CEF85BB8CE782BB83E084BB1D
:101C100080E881BB21E030E0D9010E94A116802D2F
:101C2000813071F081E0D901082E0E94A91680E070
:101C30002F5F3F4FD901082E0E94A9162150304036
:101C40002F5F3F4FD9010E94A116802D99278093C5
:101C500061000E9475090E94B9120E9430137894A5
:101C60000E94870EFDCF0F931F93062F142F20E0A5
:101C70004DEF56E0682F812F0E94C60A20E04BEFFF
:101C800056E0602F812F0E94C60A1F910F91089580
:101C9000EF92FF920F931F93082FE62EF42E682FDA
:101CA0000E94330E102F912F80916E058823E1F74B
:101CB00080916E058823E1F380916E05823019F4DE
:101CC0001E1508F41F5F80916E05813019F401170D
:101CD00008F411504F2D612F892F0E94330E8091EF
:101CE0006E05883021F080916E058430E1F6809198
:101CF0006E05843009F41FEF80916E058823E1F7AB
:101D0000812F99271F910F91FF90EF9008950E94C6
:101D10005A0960E084EE96E00E94980A60E08DEC3B
:101D200096E00E94980A60E080EC96E00E94980A93
:101D300060E081EB96E00E94980A60E082EA96E01B
:101D40000E94980A60E081E996E00E94980A60E0AB
:101D500083E896E00E94980A60E08EE696E00E9492
:101D6000980A4FE066E082E00E94480E843091F0CD
:101D7000853028F4823041F08330A1F408C08530EA
:101D800061F0863079F40CC00E94CA0808950E9460
:101D9000E41108950E94D30E08950E94311508950C
:101DA0000E944E1308950E945A0980916E0588235F
:101DB000E1F760E08FEF96E00E94980A80916E054F
:101DC0008823E1F380916E058830C9F483E2809323
:101DD000630481E68093640484E7809365048AE069
:101DE00080936604809367048093680480936904F9
:101DF00010926A0410926B0489E00E94310780916E
:101E00006E058823E1F780916E058823E1F383E274
:101E10008093630481E68093640484E7809365047F
:101E2000109266041092670410926804109269047C
:101E300010926A0410926B0489E00E9431070895A1
:101E4000FB0120E030E0482F552761E0CA01022E57
:101E500002C0959587950A94E2F780FF02C06083DF
:101E600001C010822F5F3F4F31962830310571F746
:101E7000089540E020E030E061E070E0FC018191F5
:101E8000813041F4CB01022E02C0880F991F0A94C1
:101E9000E2F7480F2F5F3F4F2830310581F7842F3D
:101EA00099270895482FFB0164E60E946E168083EF
:101EB00024E6829FC0011124481B842F6AE00E94FF
:101EC0006E162AE0829F90011124421B405D4283DE
:101ED0009081905D9083805D8183903329F490E2BE
:101EE0009083803309F4918313820895CF92DF9217
:101EF000EF92FF920F931F93CF93DF93CDB7DEB78F
:101F000062970FB6F894DEBF0FBECDBF823008F4E3
:101F100055C0615044E080E00E94480EC82E8FEF0B
:101F2000C81609F421C1EC2CFF24F701EA54F84F3C
:101F3000E081FF27ED59FB4FD08020E04EE45DE0CB
:101F40006C2D84E00E94C60A80916E058823E1F71B
:101F500080916E05813009F4DA9480916E058230AB
:101F600009F4D3948E01075F1F4FB8018D2D0E9495
:101F7000520F20E0A8016C2D80E00E94FC0A84E151
:101F800080936B0580916B058823E1F780916E0546
:101F9000843021F080916E058830D1F680916E05F5
:101FA000883009F0E1C0A6EBB7E0EA0EFB1ED701CE
:101FB000EC91FF27ED59FB4FD082D6C0813009F05C
:101FC00069C08E010F5F1F4FB801809197040E9476
:101FD000200F1A8644E063E080E00E94480ED82E6D
:101FE000BFEF8B1709F4C0C0E82EFF240E0D1F1D94
:101FF000F801008120E04CE45DE0682F84E00E945D
:10200000C60A80916E05813009F400E080916E056A
:10201000823009F401E0005D0987005320E0AE0141
:10202000475F5F4F6D2D80E00E94FC0A84E1809342
:102030006B0580916B058823E1F780916E058830F0
:1020400021F080916E058430E1F680916E05883034
:1020500051F4CE010196E80EF91ED7010C930E94AF
:10206000390F809397040E945A098E01075F1F4F12
:10207000B801809197040E94520F60E0C8010E944D
:10208000CF0A88EC80936B0580916B05882309F457
:102090006BC0FACF882309F067C08E010F5F1F4F16
:1020A000B80180916B040E94200F1A8644E067E01B
:1020B00080E00E94480ED82EBFEF8B1709F454C061
:1020C000E82EFF240E0D1F1DF801008120E04AE4D8
:1020D0005DE0682F84E00E94C60A80916E05813021
:1020E00009F400E080916E05823009F401E0005DA2
:1020F0000987005320E0AE01475F5F4F6D2D80E000
:102100000E94FC0A84E180936B0580916B05882313
:10211000E1F780916E05883021F080916E05843062
:10212000E1F680916E05883051F4CE010196E80EFB
:10213000F91ED7010C930E94390F80936B040E9403
:102140005A098E01075F1F4FB80180916B040E94EE
:10215000520F60E0C8010E94CF0A88EC80936B05A3
:1021600080916B058823E1F762960FB6F894DEBF85
:102170000FBECDBFDF91CF911F910F91FF90EF90D8
:10218000DF90CF9008956F927F928F929F92AF923F
:10219000BF92CF92DF92EF92FF920F931F93CF9354
:1021A000DF93CDB7DEB7A1970FB6F894DEBF0FBEB1
:1021B000CDBFE82E81E08E1508F044C048EDA42E76
:1021C00047E0B42E3DE5632E39E0732EFF24CC2486
:1021D000DD2423E6822E24E0922EF50184918E15D3
:1021E000E9F4EF2DFF27EA54F84FC0828E01075F14
:1021F0001F4FB801F40180810E94520F20E0A80116
:102200006F2D80E00E94FC0A20E0A3016F2D85E085
:102210000E94C60AF7E0FF1508F0F3940894C11C69
:10222000D11C83E090E0A80EB91E0894811C911C7B
:10223000E0E1F0E06E0E7F1EF2E4CF16D10409F467
:1022400063C0CBCF81E0E81679F58E010F5F1F4F99
:10225000B801809197040E94200F1A869DE9A92E4B
:1022600098E0B92E6801CE0101961C2D181BF601CD
:1022700081916F01805D898720E0AE01475F5F4FEC
:10228000612F80E00E94FC0A20E0A501612F85E01B
:102290000E94C60A80E190E0A80EB91ECE01059604
:1022A000C816D90681F1DFCFEE2069F58E010F5FE8
:1022B0001F4FB80180916B040E94200F1A8668019D
:1022C0008DEDA82E88E0B82ECE010196FC2CF81AD0
:1022D000F60181916F01805D89878E01075F1F4F35
:1022E00020E0A8016F2D80E00E94FC0A20E0A501FB
:1022F0006F2D85E00E94C60A80E190E0A80EB91E0D
:10230000C016D10609F7FF248F2D9927A1960FB685
:10231000F894DEBF0FBECDBFDF91CF911F910F911B
:10232000FF90EF90DF90CF90BF90AF909F908F90F5
:102330007F906F900895982F8630D8F426E430E08F
:10234000E9EAF4E0808183832150304031978FEFB8
:102350002F3F3807B9F783E28093630481E68093C7
:1023600064049559909365041092AD048BE40E9427
:10237000310708951F9393E29093630491E690933D
:10238000640491E790936504809366041092670457
:102390001092680486E00E94310710E00E94AC07AA
:1023A000813009F41EE11F5F8091E8048C54853070
:1023B00018F01E3198F304C080E090E01E3110F058
:1023C00081E090E01F910895FF920F931F93CF93A8
:1023D000DF93CDB7DEB72F970FB6F894DEBF0FBEF1
:1023E000CDBF0E945A0960E089E39DE00E94980AEF
:1023F00060E083E39DE00E94980A60E08DE29DE04A
:102400000E94980A60E087E29DE00E94980A60E0DE
:1024100081E29DE00E94980A60E08BE19DE00E94CD
:10242000980A40E065E081E00E94480E0E94BA11DF
:10243000813041F420E043E15DE066E080E00E940D
:10244000C60A62C062E0F62E0E945A098E010F5F32
:102450001F4F4AE050E0B8018F2D99270E9448167F
:1024600060E0C8010E94CF0A82E380936B058091EF
:102470006B058823E1F70E945A098F2D0E94C31033
:10248000682F80916E058823E1F380916E0582307C
:1024900009F4F39480916E05813009F4FA948FEF7A
:1024A000F81619F45CE0F52E04C08CE08F1508F4E2
:1024B000FF2480916E05883019F48F2D0E94760FCD
:1024C00080916E05843009F0BFCF0E945A0960E008
:1024D00080EF9CE00E94980A40E062E081E00E9468
:1024E000480E813061F460E089EE9CE00E94980A19
:1024F00085E00E949B1160E081ED9CE003C060E0FC
:102500008DEB9CE00E94980A84E680936B05809195
:102510006B058823E1F72F960FB6F894DEBF0FBE48
:10252000CDBFDF91CF911F910F91FF9008951F9222
:102530000F920FB60F9211248F939F93EF93FF93F7
:102540008091BE079CB1E0ECF7E0E80FF11D9083AD
:102550008F5F8093BE078091BE078F708093BE0708
:10256000FF91EF919F918F910F900FBE0F901F9051
:10257000189588E98AB987E089B908958AE0809337
:102580006D059091BF078091BE07981721F4809147
:102590006D058823B1F780916D05882311F4E0E083
:1025A0000FC08091BF07E82FFF27E054F84FE0816C
:1025B0008F5F8093BF078091BF078F708093BF07A5
:1025C0008E2F992708955D9BFECF8CB90895FC014D
:1025D00004C05D9BFECF8CB9319680818823C9F7FA
:1025E00008951F920F920FB60F9211248F939F930D
:1025F00080916C05882331F080916C058150809327
:102600006C0515C08AE080936C0589B39927809585
:102610009095689413F8959587951694E1F78F70C7
:1026200080936E0580916F058F5F80936F05809119
:102630006B05882329F080916B05815080936B0591
:1026400080916D05882329F080916D0581508093DC
:102650006D059F918F910F900FBE0F901F90189551
:102660008DE083BF88E48CBF89B7826089BF0895FD
:10267000F89480916100882321F484E080936100C4
:1026800002C01092610080916100A2E0B0E0082ECB
:102690000E94A9160E947509789408950F931F93BC
:1026A00011E00E945A0960E08CE79DE00E94980AC0
:1026B00060E089E79DE00E94980A60E08AE69DE07C
:1026C0000E94980A60E082E69DE00E94980A60E01D
:1026D00087E59DE00E94980A60E080E59DE00E9409
:1026E000980A4FE065E082E00E94480E833049F08E
:1026F0008430C9F0823011F010E026C00E943813F7
:1027000023C00E945A0901E022E344E664E18AE022
:102710000E94420B80916E058830B1F080916E0569
:10272000843091F0F7CF0E945A0901E028E244E694
:1027300064E18AE00E94550C80916E05883021F09A
:1027400080916E058430C1F7112309F0AACF1F9143
:102750000F910895CF93DF93EC0152E070E026C013
:10276000E52FFF27E951FB4F21812D5332813D5346
:1027700043814D535C5FDE01A80FB91F80818D53EB
:10278000880F880F922F92959F70892B8C9322959A
:10279000207F832F86958695282BFD0121833295F6
:1027A000330F330F307C342B32837D5F872F992793
:1027B0005617B0F2DF91CF9108954F925F926F92CA
:1027C0007F928F929F92AF92BF92CF92DF92EF92C1
:1027D000FF920F931F93CF93DF93FC01EB0180E2F5
:1027E000888340E8E130F40718F46624772408C0B1
:1027F000F095E195FF4F8DE2888351E0652E712CB5
:102800002E010894411C511CCF0160E177E20E9427
:102810007A168B01262F332780E197E2BC01269F91
:10282000C001279F900D369F900D11249F01281BFA
:10283000390B42E0C42ED12CCC0EDD1EC90168EE4E
:1028400073E00E947A167B01462F552788EE93E0AD
:10285000FC014E9FC0014F9F900D5E9F900D112473
:10286000281B390B93E0A92EB12CAC0EBD1EC9015B
:1028700064E670E00E947A16FB0184E6689FC0015E
:102880001124281B390B84E0882E912C8C0E9D1E60
:10289000C9016AE070E00E947A168AE0689FC00170
:1028A0001124281B390B205D2D83005D0983F0E383
:1028B000EF0EEA82E05DEB83605D6C83003391F59F
:1028C00080E2888341E06416710409F48DE2898313
:1028D000F6018081803331F580E2F2018083F1E0FE
:1028E0006F16710409F48DE2F6018083F501808191
:1028F0008033C1F480E2F6018083F1E06F16710449
:1029000009F48DE2F5018083F4018081803351F474
:1029100080E2F5018083F1E06F16710409F48DE225
:10292000F40180831E82DF91CF911F910F91FF9060
:10293000EF90DF90CF90BF90AF909F908F907F905F
:102940006F905F904F9008950F931F93082F84E12D
:1029500080936B050E94BE12833221F080916B053B
:102960008823C1F780916B05882319F481E090E0FA
:1029700030C00E94BE128093E70411E00AC00E949A
:10298000BE12E12FFF27E951FB4F80831F5F17FD28
:102990001FE78D30A1F7023221F4612F80E795E027
:1029A0000AC0802F992774E0880F991F7A95E1F764
:1029B000612F8A549A4F0E94AA13E02FFF2764E0E8
:1029C000EE0FFF1F6A95E1F7EA54FA4F178680E091
:1029D00090E01F910F910895FF920F931F93F82E8F
:1029E00083E28093630481E68093640492E2F916A3
:1029F00071F483E680936504109266041092670474
:102A00001092680486E00E94310704E40FC09FE141
:102A10009F1520F080936504F0926604109267047D
:102A20001092680486E00E94310701E410E08F2DC7
:102A30000E94A414813009F41EE11F5F8091E80414
:102A4000801710F0081718F41E3188F304C080E0D6
:102A500090E01E3110F081E090E01F910F91FF9007
:102A600008954F925F927F928F929F92AF92BF9202
:102A7000CF92DF92EF92FF920F931F93CF93DF934A
:102A8000CDB7DEB72B970FB6F894DEBF0FBECDBF24
:102A90000E945A0960E088EB9DE00E94980A1B861C
:102AA00000E010E0802F0E94EC14813039F4802F78
:102AB0000E94EC14813011F421E02B870F5F1F4F2F
:102AC0000032110579F73B85313019F088249924BB
:102AD0000EC060E08DEA9DE00E94980A88EC809329
:102AE0006B0580916B05882309F49BC0FACF809118
:102AF0006E058823E1F782E20E94EC14813071F4C4
:102B000060E082EA9DE00E94980A88EC80936B0561
:102B100080916B05882309F484C0FACF8E010F5F82
:102B20001F4FB801C4010E94DD1320E0A80160E03E
:102B30008FE00E94FC0AC401B3E0880F991FBA9588
:102B4000E1F7881999096C01CC0CDD1CE2E7F5E08E
:102B5000CE0EDF1E7C01F4E0EE0CFF1CFA95E1F7CF
:102B600026EB35E0E20EF31E442455245C01742C60
:102B7000739430E2A316B104B4F48E010F5F1F4FBB
:102B8000B801F601808191810E94DD1320E0A70148
:102B9000672D80E00E94FC0A20E0A801672D8DE0EF
:102BA0000E94FC0A07C020E04DE85DE0672D80E050
:102BB0000E94C60A0894411C511C0894A11CB11C17
:102BC00022E030E0C20ED31E80E190E0E80EF91E54
:102BD00097E04916510459F68AE080936B0580917D
:102BE0006B058823E1F780916E05813039F40894F4
:102BF0008108910897FE02C08824992480916E056F
:102C0000823051F40894811C911CE8E08E169104E6
:102C10001CF0E7E08E2E912C80916E05843009F037
:102C200066CF2B960FB6F894DEBF0FBECDBFDF91F7
:102C3000CF911F910F91FF90EF90DF90CF90BF90B9
:102C4000AF909F908F907F905F904F900895FB0181
:102C50009F01E8944230C4F04532B4F44A3029F47C
:102C600097FB1EF4909581959F4F642F77270E94C4
:102C70007A16805D8A330CF0895D8193CB010097D1
:102C8000A1F716F45DE251931082C9010C945E160F
:102C9000FB019F01423074F0453264F4642F7727C2
:102CA0000E947A16805D8A330CF0895D8193CB0196
:102CB0000097A1F71082C9010C945E16DC01FC019B
:102CC000672F71917723E1F7329704C07C916D9360
:102CD00070836291AE17BF07C8F30895991B79E01E
:102CE00004C0991F961708F0961B881F7A95C9F79C
:102CF00080950895AA1BBB1B51E107C0AA1FBB1FEB
:102D0000A617B70710F0A61BB70B881F991F5A9577
:102D1000A9F780959095BC01CD01089597FB092EE8
:102D200007260AD077FD04D0E5DF06D000201AF48C
:102D3000709561957F4F0895F6F7909581959F4F17
:102D40000895E199FECFBFBBAEBBE09A11960DB2DC
:102D50000895E199FECFBFBBAEBB0DBA11960FB679
:0C2D6000F894E29AE19A0FBE0895FFCFAC
:00000001FF
/Transportables_Koptertool/trunk/V-0.1.1/Readme.txt
0,0 → 1,16
Version V 0.1.1
 
Debug Anzeige liest nun die Texte aus der FC aus und stellt sie dar.
Beim Auslesen kann es immer mal wieder zu einem TimeOut kommen. Einfach nochmal die Daten anfordern.
Wenn keine Beschreibung angezeigt wird ist auch keine in der FC vorhanden.
 
Geblättert wird mit den beiden "Pfeiltasten".
 
Das hex ist für einen AtMega32 mit 7,xx MHz.
getestet gegen FC V0.69j
 
Erstellt mit AVRStudio 4.13
 
Have Fun
 
Mikeljo. 31.05.2008
/Transportables_Koptertool/trunk/V-0.1.1/base64.c
0,0 → 1,116
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "rs232.h"
#include "base64.h"
#include "lcd.h"
 
uint8_t r_buffer[129]; // Dieser Puffer enthält die Rohdaten (kodiert)
uint8_t p_buffer[129]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
 
uint8_t get_message() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode(index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
 
uint8_t base64_decode(uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
p_buffer[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
p_buffer[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
p_buffer[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
void base64_send(uint8_t number) // Sendet Daten zur Flight-Control
{ // Die Daten werden in p_buffer erwartet, umcodiert und gesendet
uint8_t bpointer,spointer;
uint8_t x,y,z,a;
uint16_t checksum;
 
r_buffer[0] = p_buffer[0];
r_buffer[1] = p_buffer[1];
r_buffer[2] = p_buffer[2];
 
bpointer = 3;
spointer = 3;
 
while (spointer < number)
{
x = p_buffer[spointer];
y = p_buffer[spointer + 1];
z = p_buffer[spointer + 2];
spointer += 3;
r_buffer[bpointer + 0] = (x >> 2) + 61;
r_buffer[bpointer + 1] = (((x & 0x03) << 4) | ((y & 0xF0) >> 4)) + 61;
r_buffer[bpointer + 2] = (((y & 0x0F) << 2) | ((z & 0xC0) >> 6)) + 61;
r_buffer[bpointer + 3] = (z & 0x3F) + 61;
bpointer += 4;
}
 
checksum = 0;
for(a=0;a<bpointer;a++)
checksum += r_buffer[a];
checksum %= 4096;
r_buffer[bpointer] = (checksum / 64) + 61;
r_buffer[bpointer + 1] = (checksum % 64) + 61;
r_buffer[bpointer + 2] = 13;
r_buffer[bpointer + 3] = 0;
bpointer += 3;
for(a=0;a<bpointer;a++)
RS232_send(r_buffer[a]);
}
/Transportables_Koptertool/trunk/V-0.1.1/base64.h
0,0 → 1,12
#ifndef base64_h
#define base64_h
 
uint8_t base64_decode(uint8_t number);
void base64_send(uint8_t number);
uint8_t get_message(void);
 
uint8_t p_buffer[129]; // Dieser Puffer enthält die Daten im Klartext
uint8_t r_buffer[129]; // Dieser Puffer enthält die Rohdaten (kodiert)
 
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/debug.c
0,0 → 1,257
// debug Data
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "debug.h"
 
uint8_t r_buffer[129]; // Dieser Puffer enthält die Rohdaten (kodiert)
 
uint8_t base64_decode_debug(unsigned char *ptrOut, uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
ptrOut[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in ptrOut
ptrOut[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
ptrOut[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
uint8_t get_message_debug(uint8_t command) // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
if (command == 34)
base64_decode_debug((unsigned char *) &DebugIn,index); // Die base64-kodierten Rohdaten umwandeln
else
base64_decode_debug((unsigned char *) &DebugInText[command][0], index); // Die base64-kodierten Rohdaten umwandeln
DebugInText[command][15] = 0x00; // Ende Zeichen setzen!!
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
uint8_t read_debug(uint8_t command_read) //
{
uint8_t timeout;
char compare;
 
timeout = 0;
p_buffer[0] = '#'; // Debug-Daten anfordern
p_buffer[1] = 'a';
 
if (command_read == 34)
{
p_buffer[2] = 'c';
p_buffer[3] = 0;
}
if (command_read < 32)
{
p_buffer[2] = 'a';
p_buffer[3] = command_read;
}
 
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
if (command_read == 34)
compare = 'D';
else
compare = 'A';
 
do // warten, bis die Parameter gesendet werden
{
if (get_message_debug(command_read) == 1)
timeout = 30;
timeout ++;
}
while (((r_buffer[1] < compare) || (r_buffer[1] > compare)) && (timeout < 30)); // "!=" funktioniert witzigerweise ned
 
if (timeout >= 30)
return 1;
else
return 0;
}
 
#define isminus 65536 / 2
 
void decimal_int (unsigned int data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{
int sign = 0;
text[0] = 0x20; // (schneller/kleiner als printf())
if (data > isminus)
{
data = 65536 - data;
sign = 1;
text[0] = '-';
}
 
text[1] = data/10000;
data -= (text[1] * 10000);
text[2] = data/1000;
data -= (text[2] *1000);
 
text[3] = data/100;
data -= (text[3] * 100);
text[4] = data/10;
data -= (text[4] *10);
 
 
text[5] = data + 0x30;
text[1] += 0x30;
text[2] += 0x30;
text[3] += 0x30;
text[4] += 0x30;
 
 
if (text[1] == 0x30)
{
text[0] = 0x20;
if (sign == 1) text[1] = '-'; else text[1] = 0x20;
if (text[2] == 0x30)
{
text[1] = 0x20;
if (sign == 1) text[2] = '-'; else text[2] = 0x20;
if (text[3] == 0x30)
{
text[2] = 0x20;
if (sign == 1) text[3] = '-'; else text[3] = 0x20;
if (text[4] == 0x30)
{
text[3] = 0x20;
if (sign == 1) text[4] = '-'; else text[4] = 0x20;
}
}
}
}
text[6] = 0x00;
}
 
void display_debug(void)
{
uint8_t zeile;
uint8_t text[10];
uint8_t i = 0;
int page = 0;
#define step 7
uint8_t flag = 0;
 
lcd_cls();
zeile = 0;
lcd_printp(PSTR("Debug-Display"),0);
 
for (i=0;i<32;i++)
{
if (read_debug(i) == 1)
{
if (read_debug(i) == 1) // 2mal Probieren
flag = 1;
}
}
 
if (flag == 1)
{
flag = 0;
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
}
else
{
 
do
{
while (key != 0x00);
if (read_debug(34) == 1) //Debugwerte
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
 
decimal_int(page,text);
// lcd_print_atp(0,6,PSTR("Page"),0);
lcd_print_at(15,0,text,0);
for (i=0;i<step;i++)
{
if ((i + (page * step)) < 32)
{
decimal_int(DebugIn.Analog[i + (page * step)],text);
lcd_print_at(0,i+1,DebugInText[i + (page * step)],0);
lcd_print_at(13,i+1,text,0);
}
else
lcd_print_atp(0,i+1,PSTR(" "),0);
}
 
// decimal_int(DebugIn.Analog[9],text);
// lcd_print_atp(0,7,PSTR("Spannung"),0);
// lcd_print_at(10,7,text,0);
 
timer = 10;
while(timer > 0);
if (key == 0x01)
{
page--;
if (page < 0) page = 0;
}
if (key == 0x02)
{
page++;
if (page > 7) page = 7;
}
} // end else
}
while (key != 0x04); // ESC
} // end else
}
/Transportables_Koptertool/trunk/V-0.1.1/debug.h
0,0 → 1,26
#ifndef debug_h
#define debug_h
 
void display_debug(void);
 
struct str_DebugIn
{
unsigned char Digital[2];
signed int Analog[34]; // Debugwerte
};
 
struct str_DebugIn DebugIn;
 
 
//struct str_DebugIn_Text
//{
// unsigned char Texte[16];
//};
 
//struct str_DebugIn_Text DebugInText[32];
 
unsigned char DebugInText[32][16];
 
//extern struct str_DebugIn *p_buffer;
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/displ_val.c
0,0 → 1,83
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "base64.h"
#include "lcd.h"
#include "rs232.h"
 
// Insgesamt 32 Werte können angezeigt werden
// jeweils 8 Stück werden gleichzeitg angezeigt
// Auswahl über Tasten
 
uint8_t displ_page;
 
 
void displ_get_text(uint8_t number)
{
uint8_t text[17];
uint8_t i;
p_buffer[0] = '#';
p_buffer[1] = 'a';
p_buffer[2] = 'a';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do
{
get_message();
}
while (r_buffer[1] != 'A');
 
for (i=0;i<16;i++)
text[i] = p_buffer[i];
text[16] = 0x00;
lcd_print_at(0,(number & 0x07),text,0);
}
 
void displ_values(void)
{
uint8_t displ_page, i;
int16_t value;
uint8_t text[17];
 
displ_page = 0; // Page 0..3 (4 Pages zu je 8 Werte)
lcd_cls(); // LCD löschen
do
{
for (i=0;i<8;i++) // Texte lesen und anzeigen
displ_get_text(i+displ_page*8);
do
{
get_message();
if(r_buffer[1] == 'D')
{
for (i=0;i<8;i++)
{
value = p_buffer[i*2+displ_page*16+2] + 256*p_buffer[i*2+displ_page*16+3];
itoa(value,text,10);
lcd_print_atp(14,i,PSTR(" "),0);
lcd_print_at(14,i,text,0);
}
}
}
while (key == 0x00);
if (key == 0x01)
displ_page++;
if (key == 0x02)
displ_page--;
displ_page &= 0x03;
}
while(key != 0x08);
}
 
/Transportables_Koptertool/trunk/V-0.1.1/displ_val.h
0,0 → 1,6
#ifndef displ_val_h
#define displ_val_h
 
void displ_values(void);
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/display.c
0,0 → 1,78
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t read_display (uint8_t command) //
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Display-Zeile anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'h';
p_buffer[3] = command;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1)
timeout = 10;
timeout ++;
}
while (((r_buffer[1] < '0') || (r_buffer[1] > '4')) && (timeout < 10));
if (timeout >= 10)
return 1;
else
return 0;
}
 
void display_data (void)
{
uint8_t line;
uint8_t text[10];
 
lcd_cls();
lcd_printp(PSTR("Display"),0);
do
{
while (key != 0x00);
if (read_display(0) == 1)
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
line = r_buffer[1];
text[0] = line;
text[1] = 0x00;
lcd_print_at(10,0,text,0);
lcd_print_at(0,line+1,p_buffer,0);
timer = 10;
while(timer > 0);
if (key == 0x01)
read_display(1);
if (key == 0x02)
read_display(2);
}
}
while (key != 0x04);
}
/Transportables_Koptertool/trunk/V-0.1.1/display.h
0,0 → 1,6
#ifndef display_h
#define display_h
 
void display_data (void);
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/font8x6.h
0,0 → 1,9
 
#ifndef font8x6_h
#define font8x6_h
 
#include <avr/pgmspace.h>
 
extern prog_uint8_t f8x6[256][6];
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/lcd.c
0,0 → 1,557
 
#define F_CPU 7372800UL
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
 
#include "font8x6.h"
#include "main.h"
#include "lcd.h"
 
#define DISP_W 128
#define DISP_H 64
// #define LCD_ORIENTATION 0 // 0 MJ Tasten unten / 4 Original Tasten oben
 
 
uint8_t lcd_xpos;
uint8_t lcd_ypos;
//volatile uint8_t display_buffer[1024]; // Display-Puffer, weil nicht zurückgelesen werden kann
//volatile uint16_t display_buffer_pointer; // Pointer auf das aktuell übertragene Byte
//volatile uint8_t display_buffer_counter; // Hilfszähler zur Selektierung der Page
//volatile uint8_t display_page_counter; // aktuelle Page-Nummer
//volatile uint8_t display_mode; // Modus für State-Machine
 
 
void send_byte (uint8_t data)
{
clr_cs();
SPDR = data;
while(!(SPSR & (1<<SPIF)));
SPSR = SPSR;
set_cs();
}
 
void cls (void)
{
uint16_t i,j;
for (i=0;i<1024;i++)
display_buffer[i] = 0x00;
for (i=0;i<8;i++)
{
clr_A0();
send_byte(0xB0+i); //1011xxxx
send_byte(0x10); //00010000
// send_byte(0x04); //00000100 gedreht plus 4 Byte
// send_byte(0x00); //00000000
send_byte(LCD_ORIENTATION); //00000000
 
set_A0();
for (j=0;j<128;j++)
send_byte(0x00);
}
lcd_xpos = 0;
lcd_ypos = 0;
}
 
void lcd_cls (void)
{
cls();
}
 
void wait_1ms(void)
{
_delay_ms (1.0);
}
 
void wait_ms (uint16_t time)
{
uint16_t i;
for (i=0; i<time; i++)
wait_1ms();
}
 
void lcd_init (void)
{
lcd_xpos = 0;
lcd_ypos = 0;
 
DDRB = 0xFF;
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<CPOL)|(1<<SPR1);
set_cs();
clr_reset();
wait_ms(10);
set_reset();
clr_cs();
clr_A0();
send_byte(0x40);
 
if (LCD_ORIENTATION == 0)
{
send_byte(0xA1); // A1 normal A0 reverse(original)
send_byte(0xC0); // C0 normal C8 reverse(original)
}
else
{
send_byte(0xA0); // A1 normal A0 reverse(original)
send_byte(0xC8); // C0 normal C8 reverse(original)
}
send_byte(0xA6);
send_byte(0xA2);
send_byte(0x2F);
send_byte(0xF8);
send_byte(0x00);
send_byte(0x27);
send_byte(0x81);
send_byte(0x16);
send_byte(0xAC);
send_byte(0x00);
send_byte(0xAF);
cls();
 
}
 
void set_adress (uint16_t adress, uint8_t data)
{
uint8_t page;
uint8_t column;
page = adress >> 7;
clr_A0();
send_byte(0xB0 + page);
// column = (adress & 0x7F) + 4; Wenn gedreht
// column = (adress & 0x7F);
column = (adress & 0x7F) + LCD_ORIENTATION;
 
send_byte(0x10 + (column >> 4));
send_byte(column & 0x0F);
set_A0();
send_byte(data);
}
 
void scroll (void)
{
uint16_t adress;
for (adress=0;adress<896;adress++)
{
display_buffer[adress] = display_buffer[adress+128];
set_adress(adress,display_buffer[adress]);
}
for (adress=896;adress<1024;adress++)
{
display_buffer[adress] = 0;
set_adress(adress,0);
}
}
 
//
// x,y = character-Pos. !
//
// mode: 0=Overwrite, 1 = OR, 2 = XOR, 3 = AND, 4 = Delete
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode)
{
uint8_t ch;
uint8_t i;
uint16_t adress;
 
switch(c)
{
case 'ä':
c = 0x84;
break;
case 'ö':
c = 0x94;
break;
case 'ü':
c = 0x81;
break;
case 'Ä':
c = 0x8E;
break;
case 'Ö':
c = 0x99;
break;
case 'Ü':
c = 0x9A;
break;
case 'ß':
c = 0xE1;
break;
}
adress = y*128 + x*6;
adress &= 0x3FF;
for (i=0;i<6;i++)
{
ch = pgm_read_byte (&f8x6[0][0] + i + c * 6);
switch (mode)
{
case 0:
display_buffer[adress+i] = ch;
break;
case 1:
display_buffer[adress+i] |= ch;
break;
case 2:
display_buffer[adress+i] ^= ch;
break;
case 3:
display_buffer[adress+i] &= ch;
break;
case 4:
display_buffer[adress+i] &= ~ch;
break;
}
set_adress(adress+i,display_buffer[adress+i]);
}
}
 
void new_line (void)
{
lcd_ypos++;
if (lcd_ypos > 7)
{
scroll();
lcd_ypos = 7;
}
}
 
 
void lcd_printp (const char *text, uint8_t mode)
{
while (pgm_read_byte(text))
{
if (pgm_read_byte(text) > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,pgm_read_byte(text++),mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (pgm_read_byte(text))
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
}
}
}
 
void lcd_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode)
{
lcd_xpos = x;
lcd_ypos = y;
lcd_printp (text, mode);
}
 
 
void lcd_print (uint8_t *text, uint8_t mode)
{
while (*text)
{
if (*text > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,*text++,mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (*text)
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
}
}
}
 
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode)
{
lcd_xpos = x;
lcd_ypos = y;
lcd_print(text, mode);
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Plot (set one Pixel)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// mode:
// 0=Clear, 1=Set, 2=XOR
void lcd_plot (uint8_t xpos, uint8_t ypos, uint8_t mode)
{
uint16_t adress;
uint8_t mask;
if ((xpos < 128) && (ypos < 64))
{
adress = (ypos/8) * 128 + xpos; // adress = 0/8 * 128 + 0 = 0
mask = 1<<(ypos & 0x07); // mask = 1<<0 = 1
adress &= 0x3FF;
switch (mode)
{
case 0:
display_buffer[adress] &=~mask;
break;
case 1:
display_buffer[adress] |= mask;
break;
case 2:
display_buffer[adress] ^= mask;
break;
}
set_adress(adress,display_buffer[adress]);
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Line (draws a line from x1,y1 to x2,y2
// + Based on Bresenham line-Algorithm
// + found in the internet, modified by thkais 2007
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uint8_t mode)
 
{
int x,y,count,xs,ys,xm,ym;
 
x=(int)x1;
y=(int)y1;
xs=(int)x2 - (int)x1;
ys=(int)y2 - (int)y1;
if(xs < 0)
xm= -1;
else
if(xs > 0)
xm= 1;
else
xm= 0;
if(ys < 0)
ym= -1;
else
if(ys > 0)
ym= 1;
else
ym= 0;
if(xs < 0)
xs= -xs;
if(ys < 0)
ys= -ys;
 
lcd_plot((unsigned char)x, (unsigned char)y, mode);
 
if(xs > ys) // Flat Line <45 degrees
{
count= -(xs / 2);
while(x != x2)
{
count= count + ys;
x= x + xm;
if(count > 0)
{
y= y + ym;
count= count - xs;
}
lcd_plot((unsigned char)x, (unsigned char)y, mode);
}
}
else // Line >=45 degrees
{
count=- (ys / 2);
while(y != y2)
{
count= count + xs;
y= y + ym;
if(count > 0)
{
x= x + xm;
count= count - ys;
}
lcd_plot((unsigned char)x, (unsigned char)y, mode);
}
}
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Filled rectangle
// + x1, y1 = upper left corner
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_frect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode)
{
uint16_t x2, y2;
uint16_t i;
 
if (x1 >= DISP_W)
x1 = DISP_W - 1;
if (y1 >= DISP_H)
y1 = DISP_H - 1;
x2 = x1 + widthx;
y2 = y1 + widthy;
if (x2 > DISP_W)
x2 = DISP_W;
if (y2 > DISP_H)
y2 = DISP_H;
for (i=y1;i<=y2;i++)
{
lcd_line(x1,i,x2,i,mode);
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + outline of rectangle
// + x1, y1 = upper left corner
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_rect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode)
{
uint16_t x2, y2;
 
if (x1 >= DISP_W)
x1 = DISP_W - 1;
if (y1 >= DISP_H)
y1 = DISP_H - 1;
x2 = x1 + widthx;
y2 = y1 + widthy;
if (x2 > DISP_W)
x2 = DISP_W;
if (y2 > DISP_H)
y2 = DISP_H;
 
lcd_line (x1, y1, x2, y1, mode);
lcd_line (x2, y1, x2, y2, mode);
lcd_line (x2, y2, x1, y2, mode);
lcd_line (x1, y2, x1, y1, mode);
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + outline of a circle
// + Based on Bresenham-algorithm found in wikipedia
// + modified by thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode)
{
int16_t f = 1 - radius;
int16_t ddF_x = 0;
int16_t ddF_y = -2 * radius;
int16_t x = 0;
int16_t y = radius;
 
lcd_plot(x0, y0 + radius, mode);
lcd_plot(x0, y0 - radius, mode);
lcd_plot(x0 + radius, y0, mode);
lcd_plot(x0 - radius, y0, mode);
 
while(x < y)
{
if(f >= 0)
{
y --;
ddF_y += 2;
f += ddF_y;
}
x ++;
ddF_x += 2;
f += ddF_x + 1;
 
lcd_plot(x0 + x, y0 + y, mode);
lcd_plot(x0 - x, y0 + y, mode);
lcd_plot(x0 + x, y0 - y, mode);
lcd_plot(x0 - x, y0 - y, mode);
lcd_plot(x0 + y, y0 + x, mode);
lcd_plot(x0 - y, y0 + x, mode);
lcd_plot(x0 + y, y0 - x, mode);
lcd_plot(x0 - y, y0 - x, mode);
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + filled Circle
// + modified circle-algorithm thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius)
{
int16_t f = 1 - radius;
int16_t ddF_x = 0;
int16_t ddF_y = -2 * radius;
int16_t x = 0;
int16_t y = radius;
lcd_line(x0, y0 + radius,x0, y0 - radius,1);
lcd_line(x0 + radius, y0,x0 - radius, y0,1);
while(x < y)
{
if(f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x + 1;
lcd_line(x0 + x, y0 + y,x0 - x, y0 + y,1);
lcd_line(x0 + x, y0 - y,x0 - x, y0 - y,1);
lcd_line(x0 + y, y0 + x,x0 - y, y0 + x,1);
lcd_line(x0 + y, y0 - x,x0 - y, y0 - x,1);
}
}
/Transportables_Koptertool/trunk/V-0.1.1/lcd.h
0,0 → 1,27
 
#ifndef graphics_h
#define graphics_h
 
void lcd_init (void);
void lcd_plot (uint8_t x, uint8_t y, uint8_t mode);
void lcd_rect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy,uint8_t mode);
void lcd_frect (uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t mode);
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode);
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius);
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode);
void lcd_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uint8_t mode);
void send_byte (uint8_t data);
void lcd_print(uint8_t *text, uint8_t mode);
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode);
void lcd_printp (const char *text, uint8_t mode);
void lcd_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode);
void lcd_cls (void);
 
volatile uint8_t display_buffer[1024]; // Display-Puffer, weil nicht zurückgelesen werden kann
volatile uint16_t display_buffer_pointer; // Pointer auf das aktuell übertragene Byte
volatile uint8_t display_buffer_counter; // Hilfszähler zur Selektierung der Page
volatile uint8_t display_page_counter; // aktuelle Page-Nummer
volatile uint8_t display_mode; // Modus für State-Machine
volatile uint8_t LCD_ORIENTATION;
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/main.c
0,0 → 1,88
/*
Mobiles Mikrokopter-Tool
+++++ BETA 0.1 +++++
Diese Software ist Open-Source und darf nicht für kommerzielle Zwecke verwendet werden.
Die Software darf kopiert, verändert und weitergegeben werden, unter der Bedingung,
dass immer der komplette Source inklusive dieser Lizenz weitergegeben wird.
Für den LCD-Font gilt das dort angegebene Copyright.
(C) 2008 Thomas Kaiser, thomas@ft-fanpage.de
 
Die Software wird "so wie sie ist" geliefert.
Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion.
Benutzung auf eigene Gefahr.
Ich übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden.
Dies gilt insbesondere für die vorliegende Beta-Version.
 
Teile des Source (z.B. die base64-Funktionen) sind abgewandelte Funktionen aus dem Mikrokopter-Source,
siehe http://www.mikrokopter.de
 
*/
 
//#define F_CPU 7378200ul
 
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "base64.h"
#include "timer.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
void ReadParameter(void)
{
// unsigned char *buffer;
 
LCD_ORIENTATION = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ORIENTATION]);
 
// set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
// if (number > 5) number = 5;
// eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
}
 
void WriteParameterset(void)
{
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], 0);
 
// if(number > 5) number = 5;
// eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
// eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
 
int main (void)
{
PORTA = 0xFF; // unbenutzte Pins auf Pull-Up
PORTB = 0x43;
PORTC = 0xFC;
PORTD = 0x7C;
DDRC = 0x03; // Pins für Beleuchtung auf Ausgang
DDRD = 0x80;
 
if ((eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID])) != 1)
WriteParameterset();
 
ReadParameter();
// LCD_ORIENTATION = 0;
 
lcd_init();
RS232_init();
timer_init();
sei();
 
for (;;)
main_menu();
}
/Transportables_Koptertool/trunk/V-0.1.1/main.h
0,0 → 1,45
 
#ifndef main_h
#define main_h
 
#include <avr/eeprom.h>
 
#define set_cs() PORTB |= (1<<4)
#define clr_cs() PORTB &=~(1<<4)
#define set_reset() PORTB |= (1<<2)
#define clr_reset() PORTB &=~(1<<2)
#define set_A0() PORTB |= (1<<3) // Data
#define clr_A0() PORTB &=~(1<<3) // Command
#define set_scl() PORTB |= (1<<7)
#define clr_scl() PORTB &=~(1<<7)
#define set_si() PORTB |= (1<<5)
#define clr_si() PORTB &=~(1<<5)
 
#define key_enter 0x08
#define key_esc 0x04
#define key_plus 0x02
#define key_minus 0x01
#define key_nokey 0x00
 
extern uint8_t r_buffer[129];
extern uint8_t p_buffer[129];
//extern struct str_DebugIn *p_buffer;
 
extern volatile uint8_t key;
 
extern volatile uint8_t timer;
extern volatile uint8_t rs232_timer;
 
#endif
 
//#define EEPROM_ADR_VALID 1
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ORIENTATION 2
 
 
extern unsigned char EEPromArray[];
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
/Transportables_Koptertool/trunk/V-0.1.1/makefile
0,0 → 1,414
# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
# Additional material for this makefile was submitted by:
# Tim Henigan
# Peter Fleury
# Reiner Patommel
# Sander Pool
# Frederik Rouleau
# Markus Pfaff
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#
 
 
# MCU name
MCU = atmega32
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
#put the name of the target file here (without extension)
# TARGET = main
TARGET = MMT
 
#put your C sourcefiles here
# SRC = circle.c F8x8b.c F8x8a.c F8x6.c f8x8fv.c f8x6fv.c f6x5fv.c f6x4fv.c fontsoft.c serial.c paul.c bitmap.c demo.c draw.c F16x8a.c F16x8b.c F16x8c.c t6963.c $(TARGET).c
SRC = $(TARGET).c timer.c lcd.c F8X6.c rs232.c base64.c displ_val.c parameter.c menu.c display.c motortest.c
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
 
# List C source files here. (C dependencies are automatically generated.)
# SRC = $(TARGET).c
 
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
 
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c
 
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
 
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = avr911
 
 
AVRDUDE_PORT = com4 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b 115200 -F
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
 
 
 
# ---------------------------------------------------------------------------
 
# Define directories, if needed.
DIRAVR = F:/Eigene Dateien/Controller/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Defines and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
 
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
# Programming support using ponyprog. Settings and variables.
#PONYPROG= ponyprog2000.exe
#PONYPROG= C:\Programme\ponyprog2000\ponyprog2000.exe
# Program the device.
#program: $(TARGET).hex $(TARGET).eep
# echo -e "SELECTDEVICE $(MCU)\nLOAD-PROG $(TARGET).hex\n#LOAD-DATA $(TARGET).eep\nWRITE-PROG" >isp.e2s
# $(PONYPROG) isp.e2s
 
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/Transportables_Koptertool/trunk/V-0.1.1/menu.c
0,0 → 1,91
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "motortest.h"
#include "debug.h"
#include "settings.h"
 
 
// Subroutine für den Stern (*) bzw. Cursor
 
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
{
lcd_print_atp(pos,before,PSTR(" "),0); // Die vorhergehende Position löschen
lcd_print_atp(pos,line,PSTR("*"),0); // Den Cursor an der aktuellen Position anzeigen
}
 
 
// Zeigt einen Stern (*) an der x-Position <pos> an, y-Position von min bis max.
// Mit der +/- Taste kann ein Menü-Punkt ausgewählt und mit (Enter) bestätigt werden.
// Die Zeilennummer des aktuellen Menüpunkts wird zurückgegeben.
 
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos)
{
uint8_t line, before;
line = min;
before = min;
menu_set_cursor(line,line,pos);
do
{
while (key != key_nokey);
while(key == key_nokey);
if ((key == key_plus) && (line < max))
line ++;
if ((key == key_minus) && (line > min))
line --;
 
menu_set_cursor(before,line,pos);
before = line;
}
while ((key != key_enter) && (key != key_esc)); // Schleife wiederholen, bis (Enter) / Esc gedrückt wurde
if (key == key_esc)
line = 255;
while (key != key_nokey); // Warten, bis Taste wieder losgelassen wurde
return line;
}
 
void main_menu (void)
{
lcd_cls();
lcd_printp(PSTR("Portables Koptertool\r\n"),0);
lcd_printp(PSTR(" Hauptmenü (V0.1.1)\r\n"),0);
lcd_printp(PSTR(" Display\r\n"),0);
lcd_printp(PSTR(" Parameter\r\n"),0);
lcd_printp(PSTR(" Motortest\r\n"),0);
lcd_printp(PSTR(" Debug Daten\r\n"),0);
lcd_printp(PSTR(" Settings\r\n"),0);
lcd_printp(PSTR("Mod by Mikeljo 05/08"),0);
 
switch(menu_choose(2,6,15))
{
case 2:
display_data(); // LCD-Modus
break;
case 3:
edit_parameter(); // Parameter (Settings) laden/editieren
break;
case 4:
motor_test(); // primitiver Motor-Test
break;
case 5:
display_debug(); // Debug Daten
break;
case 6:
LCD_settings(); // Einstellungen
break;
}
}
/Transportables_Koptertool/trunk/V-0.1.1/menu.h
0,0 → 1,7
#ifndef menu_h
#define menu_h
 
void main_menu (void);
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos);
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/motortest.c
0,0 → 1,52
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "motortest.h"
#include "lcd.h"
#include "base64.h"
 
void motor_test(void)
{
lcd_cls();
 
while (key != 0x00);
 
lcd_printp(PSTR("Taste drücken\r\n"),0);
while (key == 0x00);
if (key == 0x08) // nur, wenn die Bestätigungstaste gedrückt wird
{
p_buffer[0] = '#'; // Motoren einschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 10;
p_buffer[4] = 10;
p_buffer[5] = 10;
p_buffer[6] = 10;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
while (key != 0x00);
while (key == 0x00);
p_buffer[0] = '#'; // Motoren ausschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 0;
p_buffer[4] = 0;
p_buffer[5] = 0;
p_buffer[6] = 0;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
/Transportables_Koptertool/trunk/V-0.1.1/motortest.h
0,0 → 1,6
#ifndef motortest_h
#define motortest_h
 
void motor_test(void);
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/parameter.c
0,0 → 1,556
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t array[8];
 
prog_uchar p_menus[12][11]=
{
"Config ",
"Channels ",
"Stick ",
"Hoehe ",
"Gyro ",
"Looping ",
"Camera ",
"Sonstiges ",
"User ",
"Coupling ",
"Config(2) ",
"Loopingset"
};
 
 
// Diese Tabelle ordnet die eingelesenen Parameter den Menü-Seiten zu
 
prog_uchar p_menu_number[67]=
{
2,2,2,2,2,2,2,2, // Die ersten 8 Parameter werden auf Menüseite 2 angezeigt (=Kanalzuordnungen)
0,4,4,4,4,4,4,3,
3,3,8,8,8,8,5,5,
8,8,8,0,5,9,9,9,
9,7,7,7,7,7,7,6,
6,6,10,10,6,6,5,5,
5,9,9,9,9,0,7,11,
11,11,11,12,12, 12,
12,12,12,12,12
 
};
 
prog_uchar p_limits[199]= // Limits für die Parameter
{
1,8,2, // 2:Nick (3)
1,8,2, // 2:Roll (4)
1,8,2, // 2:Gas (2)
1,8,2, // 2:Gier (1)
1,8,2, // 2:Poti1 (6)
1,8,2, // 2:Poti2 (6)
1,8,2, // 2:Poti3 (7)
1,8,2, // 2:Poti4 (5)
0,0,0, // 1:Config
0,255,4, // 4:Höhe MinGas (30)
0,255,4, // 4:Luftdruck_D (30)
0,255,4, // 4:MaxHöhe (Setpoint?) (Poti4)
0,255,4, // 4:Höhe_P (10)
0,50,4, // 4:Höhe Verstärkung (3)
0,255,4, // 4:Höhe Z-acc (30)
0,6,3, // 3:Nick/Roll P (3)
0,64,3, // 3:Nick/Roll D (4)
0,20,3, // 3:Gier_P (6)
0,32,8, // 8:Min.Gas (15)
33,250,8, // 8:Max.Gas (250)
0,50,8, // 5:Gyro-Acc Faktor (30)
0,255,8, // 8:Kompass-Wirkung (128)
0,0,5, // 5:Gyro-P (80)
0,0,5, // 5:Gyro-I (120)
0,250,8, // 8:Unterspannung (94)
0,250,8, // 8:Not-Gas Zeit (20)
0,250,8, // 8:Not-Gas (35)
0,1,0, // Ufo-Ausrichtung (X +)
0,255,5, // I-Faktor (32)
0,255,9, // 9:User1 (80)
0,255,9, // 9:User2 (0)
0,255,9, // 9:User3
0,255,9, // 9:User4
0,255,7, // 7:Servo Nick Control (100)
0,250,7, // 7:Servo Nick Compensation (40)
0,250,7, // 7:Servo Nick min (50)
0,250,7, // 7:Servo Nick max (150)
0,25,7, // 7:Servo Nick refrsh (5)
0,255,6, // 6:Loop Gas Limit (50)
0,250,6, // 6:Loop Ansprechschwelle (90)
0,250,6, // 6:Loop Hysterese (50)
0,255,10, // 10:Achskopplung (90)
0,255,10, // 10:Achsgegenkopplung (5)
0,250,6, // 6:Turnover Nick (100)
0,250,6, // 6:Turnover Roll (100)
0,250,5, // 5: Gyro-Abgleich (Comp.) (32)
0,250,5, // 5: Drift (4)
0,255,5, // 5: Dynamic stability (75)
0,255,9, // 9:User5
0,255,9, // 9:User6
0,255,9, // 9:User7
0,255,9, // 9:User8 (0)
 
0,0,1, // 6:Loop Config (0)
0,1,7 // 7:Servo Nick Compensation Invert (0)
};
 
prog_char bin_parameter[12][16] = // Die binär kodierten Parametern werden getrennt behandelt.
{
"Loop up ",
"Loop down ",
"Loop left ",
"Loop right ",
"Höhenregler ", // 8
"Höhenschalter ",
"Headhold ",
"Kompass ",
"KompassFix ",
"GPS ",
"Achsenkopplung ",
"Drehrate "
};
 
prog_char parameter[54][16]=
{
"Nick ", // 0 (3)
"Roll ", // 1 (4)
"Gas ", // (2)
"Gier ", // (1)
"Poti1 ", // (6)
"Poti2 ", // (6)
"Poti3 ", // (7)
"Poti4 ", // 7 (5)
"Config ", // 8
"Hoehe_MinGas ", // 9 (30)
"Luftdruck_D ", // 10 Wert : 0-250 (30)
"MaxHoehe ", // 11 Wert : 0-250 251 -> Poti1 (Poti4)
"Hoehe_P ", // 12 Wert : 0-32 (10)
"Hoehe_Verstaerk", // 13 Wert : 0-50
"Hoehe_ACC_Wirk.", // 14 Wert : 0-250 (30)
"Stick_P ", // 15 Wert : 1-6
"Stick_D ", // 16 Wert : 0-64
"Gier_P ", // 17 Wert : 1-20 POTI(?)
"Gas_Min ", // 17 Wert : 0-32
"Gas_Max ", // 18 Wert : 33-250
"GyroAccFaktor ", // 19 Wert : 1-64
"KompassWirkung ", // 20 Wert : 0-250
"Gyro_P ", // 21 Wert : 0-250
"Gyro_I ", // 22 Wert : 0-250
"Unterspannung ", // 23 Wert : 0-250
"NotGas ", // 24 Wert : 0-250 // Gaswert bei Empangsverlust
"NotGasZeit ", // 25 Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
"UfoAusrichtung ", // 26 X oder + Formation
"I_Faktor ", // 27 = 32;
"UserParam1 ", // 28 = 32 * 4; //zur freien Verwendung
"UserParam2 ", // 29 zur freien Verwendung
"UserParam3 ", // 30 zur freien Verwendung
"UserParam4 ", // 31 zur freien Verwendung
"ServoNickCtrl ", // 32 Wert : 0-250 // Stellung des Servos
"ServoNickComp ", // 33 Wert : 0-250 // Einfluss Gyro/Servo
"ServoNickMin ", // 34 Wert : 0-250 // Anschlag
"ServoNickMax ", // 35 Wert : 0-250 // Anschlag
"ServoNickRefrsh", // 36
"LoopGasLimit ", // 37
"LoopThreshold ", // 38 Wert: 0-250 Schwelle für Stickausschlag
"LoopHysterese ", // 39
"AchsKopplung ", // 40
"AchsGegenKoppl.", // 41
"WinklUmschlNick", // 42
"WinklUmschlRoll", // 43
"GyroAccAbgleich", // 44 1/k
"Driftkomp ", // 45
"DynamicStabilit", // 47
"UserParam5 ", // 48 zur freien Verwendung
"UserParam6 ", // 49 zur freien Verwendung
"UserParam7 ", // 50 zur freien Verwendung
"UserParam8 ", // 51 zur freien Verwendung
"LoopConfig ", // 52 Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
"ServoNickCompIn" // 53 Wert : 0-250 // Richtung Einfluss Gyro/Servo
// "Name " // 54
};
 
 
// Parameter lesen, editieren und zurückschreiben
 
uint8_t read_parameter (uint8_t number) // Number = Parameter-Set#
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Parameter anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'q';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1) // Fehler bei der Übertragung?
timeout = 30; // Timeout sofort auf Endwert setzen
timeout ++;
}
while (((r_buffer[1] < 'L') || (r_buffer[1] > 'P')) && (timeout < 30)); // warten, bis Parameter empfangen wurden oder ein Timeout auftrat
if (timeout >= 30) // Wenn ein Timeout (=Fehler) auftrat, eine 1 zurückgeben, ansonsten 0
return 1;
else
return 0;
}
 
void write_parameter(uint8_t number) // Schreibe Parameter-Satz
{
uint8_t i;
if (number <= 5)
{
 
for (i=0;i<71;i++) // Den gesamten Parameter-Puffer um 3 Bytes nach hinten verschieben
p_buffer[(70-i)+3] = p_buffer[70-i];
p_buffer[0] = '#'; // Befehl zum Schreiben der Parameter
p_buffer[1] = 'a';
p_buffer[2] = number + 'k'; // Nummer des Parameters
p_buffer[74] = 0;
base64_send(75); // Parameter in base64 kodieren und senden, 75 Bytes
}
}
 
void binary (uint8_t data, uint8_t *feld) // Wandelt eine 8-Bit Zahl in eine Binärzahl um (Array mit 8 Elementen)
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
i=0;
for (i=0;i<8;i++)
{
if ((1<<i) & data)
feld[i] = 1;
else
feld[i] = 0;
}
}
 
uint8_t bindec (uint8_t *feld) // wandelt eine Binärzahl (im Array) in eine 8-Bit Zahl
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
uint8_t result;
result = 0;
for (i=0;i<8;i++)
{
if (feld[i] == 1)
result += 1<<i;
}
return result;
}
 
 
 
 
void decimal (uint8_t data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{ // (schneller/kleiner als printf())
text[0] = data/100;
data -= (text[0] * 100);
text[1] = data/10;
data -= (text[1] *10);
text[2] = data + 0x30;
text[0] += 0x30;
text[1] += 0x30;
 
if (text[0] == 0x30)
{
text[0] = 0x20;
if (text[1] == 0x30)
text[1] = 0x20;
}
text[3] = 0x00;
}
 
uint8_t show_parameter (uint8_t number) // Zeigt eine Parameter-Seite an und gibt die ausgewählte Zeile zurück
{
uint8_t i;
uint8_t line;
uint8_t text[25];
uint8_t bin[8];
line = 0;
if (number > 1)
{
for (i = 0; i<66; i++)
{
if (pgm_read_byte(p_limits+i*3+2) == number)
{
array[line] = i;
decimal(p_buffer[i],text);
lcd_print_at(0,line,text,0);
lcd_print_atp(5,line,parameter[i],0);
if (line <= 7)
line++;
}
}
}
else
{ // Sonderfälle: Binäre Eingabe
if (number == 1)
{
binary(p_buffer[52],bin); // Loop-Config
text[1] = 0x00;
for (i=0;i<4;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i],0);
}
}
if (number == 0)
{
binary(p_buffer[8],bin); // Config
text[1] = 0x00;
for (i=0;i<8;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i+4],0);
}
}
 
}
return line;
}
 
void edit_parameter2 (uint8_t page, uint8_t lines) // Ändern der Parameter einer Seite
{
uint8_t line;
uint8_t par;
uint8_t min;
uint8_t max;
uint8_t text[10];
uint8_t bin[8];
if (page > 1) // "normale" Parameter-Seiten
{
line = menu_choose(0,lines-1,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = p_buffer[array[line]];
min = pgm_read_byte(p_limits + par * 3);
max = pgm_read_byte(p_limits + par * 3 + 1);
lcd_print_atp(4,line,PSTR("-"),0);
while (key != key_nokey);
do
{
if (key == key_minus)
{
//if (par > min) // Überprüfung der Parameter auf Bereichsüberschreitung derzeit deaktiviert
par --;
}
if (key == key_plus)
{
//if (par < max)
par ++;
}
decimal(par,text);
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != 0x04) && (key != 0x08));
if (key == 0x08)
p_buffer[array[line]] = par;
}
}
if (page == 1) // Spezialfall: Loop-Config (einzelne Bits setzen / löschen)
{
binary(p_buffer[52],bin);
text[1] = 0x00;
 
line = menu_choose(0,3,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[52] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[52],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
if (page == 0) // Spezialfall: Allgemeine Konfiguration (einzelne Bits setzen/löschen)
{
binary(p_buffer[8],bin);
text[1] = 0x00;
 
line = menu_choose(0,7,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[8] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[8],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
}
 
 
void edit_parameter (void) // Blättert die Parameter seitenweise durch, Einsprung vom Hauptmenü
{
uint8_t page; // 12 Pages
uint8_t text[15];
uint8_t lines;
uint8_t parameter;
lcd_cls();
lcd_printp(PSTR("Lade Parameter\r\n"),0);
lcd_printp(PSTR(" 1:\r\n"),0);
lcd_printp(PSTR(" 2:\r\n"),0);
lcd_printp(PSTR(" 3:\r\n"),0);
lcd_printp(PSTR(" 4:\r\n"),0);
lcd_printp(PSTR(" 5:\r\n"),0);
parameter = menu_choose(1,5,0);
 
page = 2;
if (read_parameter(parameter) == 1)
{
lcd_print_atp(0,6,PSTR("Timeout"),0);
}
else
{
do
{
lcd_cls();
utoa(page,text,10);
lcd_print(text,0);
timer = 50;
while (timer > 0);
lcd_cls();
lines = show_parameter(page);
while (key == key_nokey);
if (key == key_plus)
page++;
if (key == key_minus)
page--;
if (page == 255)
page = 12;
if (page > 12)
page = 0;
if (key == key_enter)
edit_parameter2(page,lines);
}
while (key != key_esc);
lcd_cls();
lcd_printp(PSTR("Parameter speichern?\r\n ja\r\n nein"),0);
lines = menu_choose(1,2,0);
if (lines == 1 )
{
lcd_printp(PSTR("\r\n--->"),0);
write_parameter(5); // Sicherheitshalber wird derzeit ausschließlich auf Parametersatz 5 gesichert.
lcd_printp(PSTR("\r\nParameter gespeichert"),0);
}
else
{
lcd_printp(PSTR("\r\nNicht gespeichert"),0);
}
}
timer = 100;
while(timer > 0);
 
}
/Transportables_Koptertool/trunk/V-0.1.1/parameter.h
0,0 → 1,7
#ifndef parameter_h
#define parameter_h
 
void edit_parameter (void);
void decimal (uint8_t data, uint8_t *text);
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/rs232.c
0,0 → 1,58
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include "main.h"
#include "rs232.h"
 
volatile uint8_t read_index, write_index;
volatile uint8_t rs232_buffer[16];
 
ISR(USART_RXC_vect)
{
rs232_buffer[write_index++] = UDR;
write_index &= 15;
}
 
void RS232_init (void)
{
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
// UBRRL = 7; // 57600 Baud @ 7,372800 MHz
UBRR = 7; // 57600 Baud @ 7,372800 MHz
}
 
uint8_t RS232_get (void)
{
uint8_t c;
 
rs232_timer = 10;
while ((read_index == write_index) && (rs232_timer > 0));
if (rs232_timer != 0)
{
c = rs232_buffer[read_index++];
read_index &= 15;
}
else
{
c=0;
}
return c;
}
void RS232_send (uint8_t data)
{
// while ((UCSRA & (1<<UDRE)) == 0);
while ((USR & (1<<UDRE)) == 0);
UDR = data;
}
void RS232_text (uint8_t *text)
{
while (*text)
{
RS232_send(*text);
text++;
}
}
 
 
/Transportables_Koptertool/trunk/V-0.1.1/rs232.h
0,0 → 1,65
#ifndef rs232_h
#define rs232_h
 
void RS232_init (void);
uint8_t RS232_get (void);
void RS232_send (uint8_t data);
void RS232_text (uint8_t *text);
#endif
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
#define USR UCSRA
#define UCR UCSRB
#define UBRR UBRRL
#define EICR EICRB
#define INT_VEC_RX SIG_UART_RECV
#define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICR0B
#define TXEN TXEN0
#define RXEN RXEN0
#define RXCIE RXCIE0
#define TXCIE TXCIE0
#define U2X U2X0
#define UCSRB UCSR0B
#define UDRE UDRE0
#define INT_VEC_RX SIG_USART_RECV
#define INT_VEC_TX SIG_USART_TRANS
 
#define USART_RXC_vect SIG_USART_RECV
#endif
 
#if defined (__AVR_ATmega644P__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICR0B
#define TXEN TXEN0
#define RXEN RXEN0
#define RXCIE RXCIE0
#define TXCIE TXCIE0
#define U2X U2X0
#define UCSRB UCSR0B
#define UDRE UDRE0
#define INT_VEC_RX SIG_USART_RECV
#define INT_VEC_TX SIG_USART_TRANS
 
#define USART_RXC_vect SIG_USART_RECV
#endif
/Transportables_Koptertool/trunk/V-0.1.1/settings.c
0,0 → 1,70
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
 
#include "main.h"
#include "menu.h"
#include "lcd.h"
#include "settings.h"
 
 
void toggle_display(void)
{
cli();
 
if (LCD_ORIENTATION == 0)
LCD_ORIENTATION = 4;
else LCD_ORIENTATION = 0;
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], LCD_ORIENTATION);
 
lcd_init();
 
sei();
}
 
void LCD_settings(void)
{
 
// uint8_t parameter;
 
char loop = 1;
 
while(loop)
{
lcd_cls();
lcd_printp(PSTR("Einstellungen:\r\n"),0);
lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Orientierung\r\n"),0);
lcd_printp(PSTR("Linie\r\n"),0);
lcd_printp(PSTR("Rechteck\r\n"),0);
// lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Exit\r\n"),0);
// parameter = menu_choose(1,5,0);
 
switch(menu_choose(2,5,15))
{
case 2:
toggle_display(); // LCD-Modus
break;
case 3:
lcd_cls();
lcd_line(10,20,100,50, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 4:
lcd_cls();
lcd_rect (10,20,100,40, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 5:
loop = 0;
break;
default:
loop = 0;
break;
}
}
}
/Transportables_Koptertool/trunk/V-0.1.1/settings.h
0,0 → 1,9
void LCD_settings(void);
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/timer.c
0,0 → 1,37
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include "main.h"
#include "timer.h"
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
 
ISR(SIG_OUTPUT_COMPARE0) // Timer-Interrupt (100 Hz)
{
if (counter > 0)
counter --;
else
{
counter = 10;
key = (~PINA >> 4) & 0x0F;
counter2 ++;
}
if (timer > 0)
timer --;
if (rs232_timer > 0)
rs232_timer --;
}
 
void timer_init (void)
{
TCCR0 = (1<<CS02)|(1<<CS00)|(1<<WGM01); // Prescaler 1024
OCR0 = 72; // Interrupt 100Hz für 7,372800 MHz-Quarz
TIMSK |= (1<<OCIE0); // Interrupt freigeben für OCR
}
/Transportables_Koptertool/trunk/V-0.1.1/timer.h
0,0 → 1,37
#ifndef timer_h
#define timer_h
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
void timer_init (void);
 
#endif
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
#define TCCR0 TCCR0A
#define OCR0 OCR0A
#define TIMSK TIMSK0
#define OCIE0 OCIE0A
 
#define INT_VEC_TX SIG_USART_TRANS
 
#define SIG_OUTPUT_COMPARE0 SIG_OUTPUT_COMPARE0A
#endif
 
#if defined (__AVR_ATmega644P__)
#define TCCR0 TCCR0A
#define OCR0 OCR0A
#define TIMSK TIMSK0
#define OCIE0 OCIE0A
 
#define INT_VEC_TX SIG_USART_TRANS
 
#define SIG_OUTPUT_COMPARE0 SIG_OUTPUT_COMPARE0A
#endif