www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC SPI brauche Hilfe


Autor: Thomas Müller (thomas1123) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: K. J. (theborg0815) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Müller (thomas1123) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
des scheint zu funktionieren
is mit nem pic16f690
der pic is auf RC no clock gestellt um das langsam genug zu betrachten
#include "htc.h"


__CONFIG (0x30e6);

#define cs RC6
#define load RC0


char dummy;
char count = 0;
int value;
char highbyte;
char lowbyte;

void main ()
{
  ANSEL = 0;
  ANSELH = 0;
  PORTA = 0;
  PORTB = 0;
  PORTC = 0;
  TRISA = 0b00000000;
  TRISB = 0b00010000;
  TRISC = 0b00000000;
  
  SSPSTAT = 0b01000000;
  SSPCON   = 0b00100000;
  load = 0;
  cs = 1;
  
  
  while(1)
  {
    lowbyte = 0b11001100;  //value;
    highbyte = 0b11110000;  //(value >> 8);
    cs = 0;
    SSPBUF = lowbyte;
    while(BF == 1);
    dummy = SSPBUF;
    BF = 0;
    SSPBUF = highbyte;
    while(BF = 1);
    dummy = SSPBUF;
    BF = 0;
    cs = 1;
    load = 1;
    load = 0;
    
    
    
    RA2 = 1;
    RA2 = 0;
    while(1);
  }
}

Autor: Jules (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry kann keines finden

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.