Forum: Mikrocontroller und Digitale Elektronik PIC SPI brauche Hilfe


von Thomas M. (thomas1123) Benutzerseite


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

von K. J. (Gast)


Lesenswert?

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

von Thomas M. (thomas1123) Benutzerseite


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
}

von Jules (Gast)


Lesenswert?

sorry kann keines finden

von Lehrmann M. (ubimbo)


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.

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
Noch kein Account? Hier anmelden.