1 | /*********************************************************************
|
2 | * General Procedures Libary Source Code
|
3 | *********************************************************************
|
4 | * FileName: GenProcs.c
|
5 | * Dependencies: GenProcs.h
|
6 | * Processor: PIC18F4685
|
7 | * Complier: Microchip C18
|
8 | *
|
9 | *
|
10 | * Author Date Comment
|
11 | *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
12 | * Stephan Krause 17/8/12 Version 1.0 - Initial Release
|
13 | *********************************************************************/
|
14 |
|
15 | #include "Daten.h"
|
16 |
|
17 |
|
18 | /*********************************************************************
|
19 | * Function:
|
20 | *
|
21 | * Overview:
|
22 | *
|
23 | *
|
24 | * PreCondition: None
|
25 | *
|
26 | * Input: None
|
27 | *
|
28 | * Output: None
|
29 | *
|
30 | * Side Effects:
|
31 | ********************************************************************/
|
32 | char Daten_Init(void){
|
33 | unsigned int i=0;
|
34 | unsigned char buffer=0;
|
35 | unsigned int address=0;
|
36 |
|
37 |
|
38 | // Initialwert geben
|
39 | Anzeige_LokListe.FirstItem = 0;
|
40 | Anzeige_LokListe.LastItem = 0;
|
41 | Anzeige_LokListe.Cursor = 0;
|
42 | Anzeige_LokListe.CursorPosition = 0;
|
43 |
|
44 | Lokanzahl = 0;
|
45 | for(i=0; i<MAX_LOKS_IN_LISTE; i++){
|
46 | LokIDListe[i] = 0;
|
47 | LokVsollListe[i] = 0;
|
48 | LokVistListe[i] = 0;
|
49 | }
|
50 |
|
51 |
|
52 | for(i=0; i<(LOKNAME_ANZAHL_ZEICHEN); i++) LokName[i] = '\0'; // zuerst alles auf 0 setzen
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 | /* Laden der Loks, die verwaltet werden sollen aus i2c eeprom */
|
59 | #if 0
|
60 | // Hier richtiges auslesen
|
61 | // zuerst die Anzahl der zu verwaltenden Loks auslesen
|
62 | EEprom_RandomRead(I2C_MAIN_EEPROM, 0x000, &buffer); // high byte laden
|
63 | Lokanzahl = (unsigned int)buffer << 8;
|
64 | EEprom_RandomRead(I2C_MAIN_EEPROM, 0x001, &buffer); // low byte laden
|
65 | Lokanzahl += (unsigned int)buffer;
|
66 |
|
67 | // dann die ersten Lokanzahl Lok IDs auslesen
|
68 | address = 16;
|
69 | for(i=0; i<Lokanzahl; i++){
|
70 | EEprom_RandomRead(I2C_MAIN_EEPROM, address, &buffer); // high byte laden
|
71 | LokIDListe[i] = (unsigned int)buffer << 8;
|
72 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+1, &buffer); // high byte laden
|
73 | LokIDListe[i] += (unsigned int)buffer;
|
74 | address += 32;
|
75 |
|
76 | LokVsollListe[i] = 0;
|
77 | }
|
78 |
|
79 | #else
|
80 | // so tun als ob
|
81 | Lokanzahl = 0;
|
82 | for(i=0; i<MAX_LOKS_IN_LISTE; i++){ // die ersten 400byte aus eeprom gehören lok ids
|
83 | LokIDListe[i] = i+1;
|
84 | }
|
85 | Lokanzahl = MAX_LOKS_IN_LISTE;
|
86 |
|
87 | #endif
|
88 |
|
89 |
|
90 | // für die Liste die erste Lok on screen, und letzte lok on screen
|
91 | Anzeige_LokListe.FirstItem = 0;
|
92 | if(Lokanzahl>14){
|
93 | Anzeige_LokListe.LastItem = 13;
|
94 | } else {
|
95 | Anzeige_LokListe.LastItem = Lokanzahl;
|
96 | }
|
97 | Anzeige_LokListe.CursorPosition = 0;
|
98 | Anzeige_LokListe.Cursor = SYM_ARROW_LITE;
|
99 |
|
100 | return 0;
|
101 | }
|
102 |
|
103 |
|
104 | /*********************************************************************
|
105 | * Function:
|
106 | *
|
107 | *
|
108 | * Overview:
|
109 | *
|
110 | *
|
111 | * PreCondition: None
|
112 | *
|
113 | * Input: mode - 01: namen aus eeprom laden
|
114 | * 02: details aus eeprom laden
|
115 | * 04: momentanwerte über can bus holen
|
116 | *
|
117 | * Output: None
|
118 | *
|
119 | * Side Effects: None
|
120 | ********************************************************************/
|
121 | void Daten_GetLokData(char mode, unsigned int LokID, unsigned int ListenIndex){
|
122 | unsigned int address;
|
123 | unsigned int i;
|
124 |
|
125 | if(mode & 0x01) {
|
126 | for(i=0; i<17; i++) LokName[i] = '\0'; // zuerst alles auf 0 setzen
|
127 | #define SIMULIERE_EEPROM_READ
|
128 |
|
129 | #ifndef SIMULIERE_EEPROM_READ
|
130 | // zuerst den Loknamen aus dem EEPROM laden
|
131 | address = 32+ListenIndex*32 ;
|
132 |
|
133 | for(i=0; i<(LOKNAME_ANZAHL_ZEICHEN+1); i++) LokName[i] = '\0'; // zuerst alles auf 0 setzen
|
134 | EEprom_RandomReadSequence(I2C_MAIN_EEPROM, address, &LokName, 16); // dann die 16 zeichen aus eeprom laden
|
135 |
|
136 | #else
|
137 | LokName[0] = 'L';
|
138 | LokName[1] = 'u';
|
139 | LokName[2] = 'g';
|
140 | LokName[3] = 'm';
|
141 | LokName[4] = 'i';
|
142 | LokName[5] = 'l';
|
143 | LokName[6] = 'l';
|
144 | LokName[7] = 'a';
|
145 | LokName[8] = ' ';
|
146 | LokName[9] = 'G';
|
147 | LokName[10] = 'ü';
|
148 | LokName[11] = 't';
|
149 | LokName[12] = 'e';
|
150 | LokName[13] = 'r';
|
151 | LokName[14] = 'z';
|
152 | LokName[15] = 'u';
|
153 | LokName[16] = 'g';
|
154 | LokName[17] = ' ';
|
155 | LokName[18] = '0';
|
156 | LokName[19] = '1';
|
157 | LokName[20] = '2';
|
158 | LokName[21] = '\0';
|
159 | #endif
|
160 | }
|
161 | if (mode & 0x02) { // Details aus eeprom laden
|
162 | #ifndef SIMULIERE_EEPROM_READ
|
163 | address = ListenIndex * 32 + 18;
|
164 | EEprom_RandomRead(I2C_MAIN_EEPROM, address, &LokTemp.Anfahrspannung);
|
165 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+1, &LokTemp.Maximalspannung);
|
166 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+2, &LokTemp.PWM_Amplitude);
|
167 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+3, &LokTemp.PWM_Frequenze);
|
168 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+4, &LokTemp.Maximalstrom);
|
169 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+5, &LokTemp.Anfahrkoeff);
|
170 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+6, &LokTemp.Bremskoeff);
|
171 | EEprom_RandomRead(I2C_MAIN_EEPROM, address+7, &LokTemp.Laenge);
|
172 | #else
|
173 | LokTemp.Anfahrspannung = 40;
|
174 | LokTemp.Maximalspannung = 160;
|
175 | LokTemp.PWM_Amplitude = 130;
|
176 | LokTemp.PWM_Frequenz = 1;
|
177 | LokTemp.Maximalstrom = 150;
|
178 | LokTemp.Anfahrkoeff = 35;
|
179 | LokTemp.Bremskoeff = 50;
|
180 | LokTemp.Laenge = 88;
|
181 | #endif
|
182 | }
|
183 | if (mode & 0x04) {
|
184 | #ifndef SIMULIERE_EEPROM_READ
|
185 | // Über Bus die Anfrage an FR mit LokID LokID senden, damit mir dieser die Daten sendet
|
186 | // SendBus(LokID, ID_Anfragen_Momentane_Details);
|
187 |
|
188 | #else
|
189 | LokTemp.v_ist = 165;
|
190 | LokTemp.dir_ist = 0;
|
191 | LokTemp.dir_soll = 0;
|
192 |
|
193 | #endif
|
194 | }
|
195 |
|
196 | //LokVsollListe[ListenIndex] = 165; // Kenne ich eigentlich schon, brauche ich also nicht nochmal abfragen
|
197 |
|
198 |
|
199 |
|
200 |
|
201 |
|
202 | return;
|
203 | }
|