Hi, ich bin gerade dabei mit dem BusPirat eine I2C anwendung zu entwickeln auf dem PIC24F128. Irgendwie habe ich den verdacht das der BusPirate mir meinen zweiten PIC gekillt hat. Wie kann man den PIC davor bewaren. Oder schafft es ein Ossi (Oszilloskop, kein neudeutscher ;-)), den PIC zu grillen. betroffen ist die I2C2 schnittstelle. die tuts nicht mehr. gruß pakr
Das kann ich mir beim besten Willen nicht vorstellen ! Ich sag ausgeschlossen. Es liegt garantiert an der Software bzw. der Beschaltung. Darum das mal posten.
Lehrmann Michael schrieb: > Das kann ich mir beim besten Willen nicht vorstellen ! Ich sag > ausgeschlossen. > > Es liegt garantiert an der Software bzw. der Beschaltung. Darum das mal > posten. hier auszüge aus dem schaltplan.
Lehrmann Michael schrieb: > Das kann ich mir beim besten Willen nicht vorstellen ! Ich sag > ausgeschlossen. > > Es liegt garantiert an der Software bzw. der Beschaltung. Darum das mal > posten. Und hier der Auszug aus dem Code. Die initialisierung der I2C erfolgt woanders.
1 | void Server(void) |
2 | {
|
3 | |
4 | unsigned char v1,v2,v3,address,adcval; |
5 | unsigned int j; |
6 | |
7 | WORD w, w2; |
8 | BYTE i,AppBuffer[32]; |
9 | char DataBytes[2] ; |
10 | |
11 | BYTE Error_Command[16] = "Error Command!\r\n"; |
12 | BYTE Error_Command2[16] = "Error Mode\r\n"; |
13 | BYTE Info[15] = "TCP vers 0.1\r\n"; |
14 | WORD wMaxGet, wMaxPut, wCurrentChunk; |
15 | static TCP_SOCKET MySocket; |
16 | static enum _TCPServerState |
17 | {
|
18 | SM_HOME = 0, |
19 | SM_LISTENING, |
20 | } TCPServerState = SM_HOME; |
21 | |
22 | switch(TCPServerState) |
23 | {
|
24 | case SM_HOME: |
25 | // Allocate a socket for this server to listen and accept connections on
|
26 | MySocket = TCPOpen(0, TCP_OPEN_SERVER, SERVER_PORT, TCP_PURPOSE_GENERIC_TCP_SERVER); |
27 | if(MySocket == INVALID_SOCKET) |
28 | return; |
29 | |
30 | TCPServerState = SM_LISTENING; |
31 | break; |
32 | |
33 | case SM_LISTENING: |
34 | // See if anyone is connected to us
|
35 | if(!TCPIsConnected(MySocket)) |
36 | return; |
37 | |
38 | |
39 | // Figure out how many bytes have been received and how many we can transmit.
|
40 | wMaxGet = TCPIsGetReady(MySocket); // Get TCP RX FIFO byte count |
41 | wMaxPut = TCPIsPutReady(MySocket); // Get TCP TX FIFO free space |
42 | |
43 | // Make sure we don't take more bytes out of the RX FIFO than we can put into the TX FIFO
|
44 | if(wMaxPut < wMaxGet) |
45 | wMaxGet = wMaxPut; |
46 | |
47 | // Process all bytes that we can
|
48 | // This is implemented as a loop, processing up to sizeof(AppBuffer) bytes at a time.
|
49 | // This limits memory usage while maximizing performance. Single byte Gets and Puts are a lot slower than multibyte GetArrays and PutArrays.
|
50 | wCurrentChunk = sizeof(AppBuffer); |
51 | |
52 | |
53 | |
54 | for(w = 0; w < wMaxGet; w += sizeof(AppBuffer)) |
55 | {
|
56 | // Make sure the last chunk, which will likely be smaller than sizeof(AppBuffer), is treated correctly.
|
57 | if(w + sizeof(AppBuffer) > wMaxGet) |
58 | wCurrentChunk = wMaxGet - w; |
59 | |
60 | // Transfer the data out of the TCP RX FIFO and into our local processing buffer.
|
61 | TCPGetArray(MySocket, AppBuffer, wCurrentChunk); |
62 | |
63 | for(w2 = 0; w2 < wCurrentChunk; w2++) |
64 | {
|
65 | i = AppBuffer[w2]; |
66 | if(i >= 'a' && i <= 'z') |
67 | {
|
68 | i -= ('a' - 'A'); |
69 | AppBuffer[w2] = i; |
70 | }
|
71 | }
|
72 | |
73 | if (AppBuffer[0]=='S'){ |
74 | // 0 1 2 3 4 5 6 7 8 9
|
75 | // [S] [D] [A|B|C|D] 0 X [0..9|A..F] [0..9|A..F] [0..9|A..F][1|2|3|e][P] --> SDA0XFFF1P
|
76 | //
|
77 | // 0 1 2 3 4 5 6 7 8 9
|
78 | // [S] [E] [A|B|C|D] 0 X [0..9|A..F] [0..9|A..F] [0..9|A..F][1|2|3|e][P] --> SDA0XFFF2P
|
79 | //
|
80 | |
81 | switch(AppBuffer[1]) { |
82 | case 'D': |
83 | switch(AppBuffer[2]){ |
84 | case 'A': address = 0xc0; break; |
85 | case 'B': address = 0xc2; break; |
86 | case 'C': address = 0xc4; break; |
87 | case 'D': address = 0xc6; break; |
88 | }
|
89 | // Convert Value from Ascii to HEX
|
90 | v2 =getHex(AppBuffer[6],AppBuffer[7]); |
91 | v1 =getHex('0',AppBuffer[5]); |
92 | |
93 | if(AppBuffer[9]!='P'){ |
94 | v1=v1|((AppBuffer[8]-0x30)<<4); |
95 | }
|
96 | //Start I2C2
|
97 | StartI2C2(); |
98 | IdleI2C2(); |
99 | |
100 | while(I2C2CONbits.SEN ); |
101 | |
102 | MasterWriteI2C2(address); |
103 | IdleI2C2(); |
104 | while(I2C2STATbits.ACKSTAT); |
105 | for(j=0;j<100;j++); |
106 | IdleI2C2(); |
107 | |
108 | |
109 | MasterWriteI2C2(v1); |
110 | while(I2C2STATbits.ACKSTAT); |
111 | for(j=0;j<100;j++); |
112 | IdleI2C2(); |
113 | |
114 | MasterWriteI2C2(v2); |
115 | for(j=0;j<100;j++); |
116 | IdleI2C2(); |
117 | |
118 | |
119 | StopI2C2(); |
120 | break; |
121 | |
122 | case 'A': |
123 | |
124 | //ADC - MODE
|
125 | if (AppBuffer[2]>=0x30 && AppBuffer[2]<=0x37){ |
126 | ADC_VAL.sel = (AppBuffer[2] - 0x30); |
127 | }else{ |
128 | break; |
129 | }
|
130 | //Full-Scale
|
131 | if (AppBuffer[3]=='F'){ |
132 | ADC_VAL.rng = 1; |
133 | }else{ |
134 | ADC_VAL.rng = 0; |
135 | }
|
136 | //Bipolar Unipolar
|
137 | if (AppBuffer[3]=='B'||AppBuffer[4]=='B'){ |
138 | ADC_VAL.bip =1; |
139 | }else{ |
140 | ADC_VAL.bip =0; |
141 | }
|
142 | //POWER MODE, Standby, FullDown or Working
|
143 | if (AppBuffer[3]=='S'||AppBuffer[4]=='S'||AppBuffer[5]=='S'){ |
144 | ADC_VAL.pd1 =0; |
145 | ADC_VAL.pd0 =1; |
146 | }else if(AppBuffer[3]=='D'||AppBuffer[4]=='D'||AppBuffer[5]=='D'){ |
147 | ADC_VAL.pd1 =1; |
148 | ADC_VAL.pd0 =1; |
149 | }else{ |
150 | ADC_VAL.pd1 =0; |
151 | ADC_VAL.pd0 =0; |
152 | }
|
153 | ADC_VAL.start=1; |
154 | adcval =ADC_VAL.byte; |
155 | //WRITE
|
156 | StartI2C2(); |
157 | IdleI2C2(); |
158 | |
159 | while(I2C2CONbits.SEN ); |
160 | MasterWriteI2C2(0x50); |
161 | IdleI2C2(); |
162 | |
163 | while(I2C2STATbits.ACKSTAT); |
164 | for(j=0;j<100;j++); |
165 | IdleI2C2(); |
166 | |
167 | MasterWriteI2C2(adcval); |
168 | while(I2C2STATbits.ACKSTAT); |
169 | for(j=0;j<100;j++); |
170 | IdleI2C2(); |
171 | StopI2C2(); |
172 | |
173 | for(j=0;j<100;j++); |
174 | IdleI2C2(); |
175 | StartI2C2(); |
176 | |
177 | //READ
|
178 | MasterWriteI2C2(0x51); |
179 | for(j=0;j<100;j++); |
180 | while(I2C2STATbits.ACKSTAT); |
181 | |
182 | DataBytes[0] = MasterReadI2C2(); // Read first data byte |
183 | |
184 | AckI2C2(); |
185 | DataBytes[1] = MasterReadI2C2(); // Read secound data byte |
186 | |
187 | |
188 | StopI2C2(); |
189 | break; |
190 | |
191 | case 'I': TCPPutArray(MySocket, Info, 15);break; |
192 | default: TCPPutArray(MySocket, Error_Command2, 11); |
193 | }// END SWITCH CASSE |
194 | |
195 | }else{ |
196 | AppBuffer[0]== 0x00; |
197 | TCPPutArray(MySocket, Error_Command, 16); |
198 | }
|
199 | }
|
200 | |
201 | |
202 | |
203 | break; |
204 | }
|
205 | }
|
gruß pakr
Pa Kr schrieb: > Oder schafft es ein > Ossi (Oszilloskop, kein neudeutscher ;-)), den PIC zu grillen. Durchaus. Ein Oszi ist in der Regel geerdet. Wenn dann irgendein Netzteil nicht richtig trennt oder der Schutzleiter unterbrochen ist, dann machts kurz mal Britzel, wenn Du das Oszi anklemmst. Peter
Peter Dannegger schrieb: > Pa Kr schrieb: >> Oder schafft es ein >> Ossi (Oszilloskop, kein neudeutscher ;-)), den PIC zu grillen. > > Durchaus. > Ein Oszi ist in der Regel geerdet. > Wenn dann irgendein Netzteil nicht richtig trennt oder der Schutzleiter > unterbrochen ist, dann machts kurz mal Britzel, wenn Du das Oszi > anklemmst. > > > Peter sowas hatte ich schon in verdacht, aber es hängt alles am selben netz. ebend habe ich die schutzleiter gegeneinander durchgemessen, 0V. alles i.o. das ist alles wieder seltsam. ich versuche es erstmal mit 10k pullups. im forum von microchip gab es ein paar andeutungen das es mit zu kleinen probleme geben kann. paka
JAP 10k und es läuft wieder deutlich flüssiger. aber in den spezifikationen von microhip ist angegeben 400kHz --> 1kOhm. egal es funzt soweit. ABER der max 127 spielt nicht richtg mit. ansprechen und konfigurieren läßt er sich, aber wenn ich in auslesen will hängt er nach dem read. nach dem ich eine pause zwischen dem write und read eingebaut hatte, kommt er zwar durch, also er ließt scheinbar 2 werte aus und ich bekomme auch daten. aber die clock leitung bleibt am ende down ? selbst nach einem versuchten stop befehl? hat da jamand eine ahnung, oder vielleicht erfahrungen mit dem max127? gruß paKr
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.