ich versuche nun schon seit ner weile die kommunikation zwichen einem PIC16F690 und einem DA-Wandler MCP4822 (beises Microchip) zum laufen zu krigen. als programmiersprache benutze ich C ich werde aber aus dem datenblatt nicht schlau. was ich mal bräuchte wäre eine art flowchart so in etwa wie z.b. schreibe XYZ in register ABC dann schreibe FHG in register DEF dann lese aus register so und so... ich hoffe auf eure hilfe vielen dank schonmal im vorraus mfg Thomas
Hi schau mal bei Mikrochip unter tutorials da gibt es eins für spi des ist wirklich gut da ist dann auch nen flowchart drinnen
des scheint zu funktionieren is mit nem pic16f690 der pic is auf RC no clock gestellt um das langsam genug zu betrachten
1 | #include "htc.h" |
2 | |
3 | |
4 | __CONFIG (0x30e6); |
5 | |
6 | #define cs RC6
|
7 | #define load RC0
|
8 | |
9 | |
10 | char dummy; |
11 | char count = 0; |
12 | int value; |
13 | char highbyte; |
14 | char lowbyte; |
15 | |
16 | void main () |
17 | {
|
18 | ANSEL = 0; |
19 | ANSELH = 0; |
20 | PORTA = 0; |
21 | PORTB = 0; |
22 | PORTC = 0; |
23 | TRISA = 0b00000000; |
24 | TRISB = 0b00010000; |
25 | TRISC = 0b00000000; |
26 | |
27 | SSPSTAT = 0b01000000; |
28 | SSPCON = 0b00100000; |
29 | load = 0; |
30 | cs = 1; |
31 | |
32 | |
33 | while(1) |
34 | {
|
35 | lowbyte = 0b11001100; //value; |
36 | highbyte = 0b11110000; //(value >> 8); |
37 | cs = 0; |
38 | SSPBUF = lowbyte; |
39 | while(BF == 1); |
40 | dummy = SSPBUF; |
41 | BF = 0; |
42 | SSPBUF = highbyte; |
43 | while(BF = 1); |
44 | dummy = SSPBUF; |
45 | BF = 0; |
46 | cs = 1; |
47 | load = 1; |
48 | load = 0; |
49 | |
50 | |
51 | |
52 | RA2 = 1; |
53 | RA2 = 0; |
54 | while(1); |
55 | }
|
56 | }
|
Thomas Müller schrieb: > ANSEL = 0; > ANSELH = 0; Sicher? Schau nochmal im Datenblatt nach - ich hab gerade keines da. Thomas Müller schrieb: > while(BF = 1); Das ist immer wahr. Ist dir klar warum? Du weißt der Variable BF den Wert 1 zu. Die Rückgabe davon ist immer 1 -> wahr. Wenn du wissen möchtest ob die Variable BF den Wert 1 hat, dann muss es heißen BF==1. Der Rückgabewert hängt jetzt davon ab, ob BF den Wert 1 hat oder nicht. Weiter: Du hast 2 Whileschleifen (hier endlos) ineinander verschachtelt. Das ist sinnlos. Dein Prgramm wird nur einmal ausgeführt, danach hängt es an der letzten while(1) (drittletzte Zeile). Wenn es immer wieder ausgeführt werden soll, dann muss diese while(1) weg. Dann wird der Inhalt der äußeren Schleife endlos ausgeführt.
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.