Hallo, ich hab bei Pollin 2 RFM12 gekauft, und versuche diese dazu zu überreden mit einem PIC zu kommunizieren. Zum Test bekommt der PIC seinen Takt vom RFM12 und lässt eine LED blinken. Dann wird der CLK-Ausgang des RFM12 auf 10MHz umgeschaltet, und die LED sollte deutlich schneller blinken. Das ganze funktioniert auch, allerdings nur sehr sporadisch. Ich muss den Befehl ca. 6mal schicken um eine gute Chance zu haben, das er korrekt ausgeführt wird. Meine Frage: Welche Ursachen kann das haben? Hab es bereits mit Abblockkondensatoren versucht(100nF Keramik), auch "nFFS" hab ich testweise über 11kOhm(statt 10) auf +5V gezogen, jeweils keinerlei Veränderung. thanks in advance, -=)Hama(=-
Lässt Du dem RFM12 denn auch seine 100ms Power-On - Zeit, bevor Du den Befehl sendest? Code und Schaltplan könnten eine weitere Fehlersuche erleichtern...
die 100ms sollten kein Problem sein, ich hab etliche Pausen eingebaut der Code sieht mittlerweile ziemlich schrecklich aus:
1 | ;========================================================================== |
2 | ; |
3 | ; Configuration Bits |
4 | ; |
5 | ;========================================================================== |
6 | |
7 | _BODEN_ON EQU H'3FFF' |
8 | _BODEN_OFF EQU H'3FBF' |
9 | _CP_ALL EQU H'03FF' |
10 | _CP_75 EQU H'17FF' |
11 | _CP_50 EQU H'2BFF' |
12 | _CP_OFF EQU H'3FFF' |
13 | _DATA_CP_ON EQU H'3EFF' |
14 | _DATA_CP_OFF EQU H'3FFF' |
15 | _PWRTE_OFF EQU H'3FFF' |
16 | _PWRTE_ON EQU H'3FF7' |
17 | _WDT_ON EQU H'3FFF' |
18 | _WDT_OFF EQU H'3FFB' |
19 | _LVP_ON EQU H'3FFF' |
20 | _LVP_OFF EQU H'3F7F' |
21 | _MCLRE_ON EQU H'3FFF' |
22 | _MCLRE_OFF EQU H'3FDF' |
23 | _ER_OSC_CLKOUT EQU H'3FFF' |
24 | _ER_OSC_NOCLKOUT EQU H'3FFE' |
25 | _INTRC_OSC_CLKOUT EQU H'3FFD' |
26 | _INTRC_OSC_NOCLKOUT EQU H'3FFC' |
27 | _EXTCLK_OSC EQU H'3FEF' |
28 | _LP_OSC EQU H'3FEC' |
29 | _XT_OSC EQU H'3FED' |
30 | _HS_OSC EQU H'3FEE' |
31 | |
32 | __CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _HS_OSC |
33 | |
34 | STATUS EQU 0x03 |
35 | |
36 | RFM12 EQU 0x06 |
37 | SDI EQU 0x01 |
38 | SCK EQU 0x00 |
39 | |
40 | RS232 EQU 0x05 |
41 | LED EQU 0x01 |
42 | |
43 | COUNT1 EQU 0x70 |
44 | COUNT2 EQU 0x71 |
45 | COUNT3 EQU 0x72 |
46 | SEND_H EQU 0x73 |
47 | SEND_L EQU 0x74 |
48 | SEND_C EQU 0x75 |
49 | |
50 | ORG 0x00 |
51 | GOTO start |
52 | |
53 | |
54 | |
55 | start |
56 | BSF STATUS, 0x05 ;bank1 |
57 | BCF RS232, LED ;led is output |
58 | BCF RFM12, SDI ;sdi output |
59 | BCF RFM12, SCK ;sck output |
60 | BCF STATUS, 0x05 ;bank 0 |
61 | |
62 | |
63 | |
64 | MOVLW 0xC0 |
65 | MOVWF SEND_H |
66 | MOVLW 0xE0 |
67 | MOVWF SEND_L |
68 | CALL send |
69 | CALL send |
70 | CALL send |
71 | CALL send |
72 | CALL send |
73 | |
74 | loop1 |
75 | |
76 | |
77 | |
78 | |
79 | BSF RS232, LED |
80 | CALL pause |
81 | GOTO loop2 |
82 | |
83 | loop2 |
84 | BCF RS232, LED |
85 | CALL pause |
86 | GOTO loop1 |
87 | |
88 | pause |
89 | MOVLW 0x01 |
90 | MOVWF COUNT1 |
91 | pauseloop1 |
92 | MOVLW 0x50 |
93 | MOVWF COUNT2 |
94 | pauseloop2 |
95 | MOVLW 0xFF |
96 | MOVWF COUNT3 |
97 | pauseloop3 |
98 | DECFSZ COUNT3,1 |
99 | GOTO pauseloop3 |
100 | |
101 | DECFSZ COUNT2,1 |
102 | GOTO pauseloop2 |
103 | |
104 | DECFSZ COUNT1,1 |
105 | GOTO pauseloop1 |
106 | RETURN |
107 | |
108 | send |
109 | MOVLW 0x07 |
110 | MOVWF SEND_C |
111 | sendloop_h |
112 | |
113 | RLF SEND_H, 0x1 |
114 | BTFSC SEND_H, 0x0 |
115 | BSF RFM12, SDI |
116 | |
117 | BTFSS SEND_H, 0x0 |
118 | BCF RFM12, SDI |
119 | |
120 | call send_pause |
121 | BSF RFM12, SCK |
122 | call send_pause |
123 | BCF RFM12, SCK |
124 | call send_pause |
125 | |
126 | DECFSZ SEND_C,0x1 |
127 | GOTO sendloop_h |
128 | |
129 | MOVLW 0x07 |
130 | MOVWF SEND_C |
131 | |
132 | call pause |
133 | |
134 | sendloop_l |
135 | |
136 | RLF SEND_L, 0x1 |
137 | BTFSC SEND_L, 0x0 |
138 | BSF RFM12, SDI |
139 | |
140 | BTFSS SEND_L, 0x0 |
141 | BCF RFM12, SDI |
142 | |
143 | call send_pause |
144 | BSF RFM12, SCK |
145 | call send_pause |
146 | BCF RFM12, SCK |
147 | call send_pause |
148 | |
149 | DECFSZ SEND_C,0x1 |
150 | GOTO sendloop_l |
151 | |
152 | RETURN |
153 | |
154 | send_pause |
155 | NOP |
156 | NOP |
157 | NOP |
158 | NOP |
159 | NOP |
160 | NOP |
161 | NOP |
162 | NOP |
163 | NOP |
164 | NOP |
165 | NOP |
166 | NOP |
167 | NOP |
168 | NOP |
169 | NOP |
170 | NOP |
171 | NOP |
172 | NOP |
173 | NOP |
174 | NOP |
175 | NOP |
176 | NOP |
177 | NOP |
178 | NOP |
179 | NOP |
180 | NOP |
181 | NOP |
182 | NOP |
183 | NOP |
184 | NOP |
185 | NOP |
186 | NOP |
187 | NOP |
188 | NOP |
189 | NOP |
190 | NOP |
191 | NOP |
192 | NOP |
193 | NOP |
194 | NOP |
195 | NOP |
196 | NOP |
197 | NOP |
198 | NOP |
199 | NOP |
200 | NOP |
201 | NOP |
202 | NOP |
203 | NOP |
204 | NOP |
205 | |
206 | RETURN |
207 | |
208 | END |
durch das 6malige senden wird mit großer Sicherheit wirkl der Ausgabe-Takt verändert, nur manchmal nicht auf den gewünschten Wert. Schaltplan hab ich nicht in schriftlicher Form vorliegen, ganz falsch kann er aber nicht sein, da die Kommunikation ja manchmal funktioniert, oder welche Infos fehlen da konkret?
hochschieb hat keiner mehr eine idee? Bräucht nur ein paar Stichworte woran es noch liege könnte, weil mir fällt nix mehr ein. Hab das ganze mit 2 verschiedenen Modulen in 2 Schaltungen ausprobiert, beide mal der gleiche Fehler.
Ich glaube du wartest einfach nicht lange genug, gib dem Modul einfach etwas mehr Zeit. Hast du dir auch mal die Signale am SPI angeschaut? Wie siehts mit den Timings für die Schnittstelle aus? Grüße Fasti
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.