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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.