PIC SPI brauche Hilfe

OP Persönliche Seite #705174
Lesenswert?

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
OP Persönliche Seite #710796
Lesenswert?

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
}
#2261519
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren