HI TECH C - PIC18F4585 SPI Problem
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache C  |  HI TECH C - PIC18F4585 SPI Problem « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: HI TECH C - PIC18F4585 SPI Problem  (Gelesen 486 mal)
 
Max Pohl
Jr. Member
**
Offline Offline

Beiträge: 65



Profil anzeigen
« am: Februar 22, 2012, 19:20:29 »

Hallo,
ich versuche schon seit Stunden den Tackt der SPI Schnittstelle mit dem Timer2 output zu erzeugen.
Leider ohne erfolg.
Wenn ich eine andere Taktquelle wähle funktioniert die Schnittstelle, mit TMR2 Output jedoch nicht.
Ich habe den TMR2 konfiguriert und aktiviert. In einer Interrupt ISR setzte ich den Timer interrupt zurück.

Code:
T2CONbits.T2CKPS = 2;
T2CONbits.TOUTPS = 1;
T2CONbits.TMR2ON = 1;
PR2 = 255;

Hat jemand eine idee was ich falsch mache?

Danke

Gruß Max
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Februar 23, 2012, 14:39:08 »

Zitat
ich versuche schon seit Stunden den Tackt der SPI Schnittstelle mit dem Timer2 output zu erzeugen.
Das geht nicht. Du braucht ein PWM Modul.
Zitat
Wenn ich eine andere Taktquelle wähle funktioniert die Schnittstelle, mit TMR2 Output jedoch nicht.
SPI hat nix, aber auch gar nix mit irgendwelchen Timern zu tun.

Oder willst du nur einen IO mit dem Timer toggeln?

Gruß
Stefan
Gespeichert

Max Pohl
Jr. Member
**
Offline Offline

Beiträge: 65



Profil anzeigen
« Antworten #2 am: Februar 23, 2012, 16:39:52 »

Ich möchte einfach nur die SPI Schnittstelle verwenden.
Das Problem ist aber das mein Slave nur einen max. Frequenz von 65kHz verträgt.
Da ich nur folgende clock einstellungen zur verfügung habe muss ich den Timer2 verwenden.

Ich habe einen externen Takt von 16Mhz am PIC.

0011 = SPI Master mode, clock = TMR2 output/2
0010 = SPI Master mode, clock = FOSC/64
0001 = SPI Master mode, clock = FOSC/16
0000 = SPI Master mode, clock = FOSC/4

Der Timer läuft aber die SPI Schnittstelle geht nicht!

Gruß Max
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #3 am: Februar 23, 2012, 16:58:29 »

Hi,

ok, langsam verstehe ich.
Zitat
Der Timer läuft aber die SPI Schnittstelle geht nicht!
Was geht nicht? Welcher PIC? Damit auf der Schnitelle was passiert musst du was in den SPI Buffer schreiben. Ohne mehr Info kann dir keiner helfen.

Zitat
Das Problem ist aber das mein Slave nur einen max. Frequenz von 65kHz verträgt.
Wenn das so ne lahme Gurke ist kann man das auch rein in Software machen.

Gruß
Stefan
Gespeichert

Max Pohl
Jr. Member
**
Offline Offline

Beiträge: 65



Profil anzeigen
« Antworten #4 am: Februar 23, 2012, 17:28:55 »

Die SPI Schnittstelle arbeitet bereits.
Ich muss nun aber den Takt verringern daher möchte ich den TMR2 als Quelle verwenden.
Ich wollte mir eigentlich etwas arbeit sparen, dachte die Umstellung geht etwas einfacher.
Also das einzige Problem ist das ich die SPI nun so konfiguriert habe das sie eigentlich TMR2 output als clock verwenden soll, dies geht jedoch nicht.
Muss ich dabei was spezielles beachten? Ich verwende einen PIC18F4585
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #5 am: Februar 27, 2012, 11:03:31 »

Hi,

wenn der Timer geht dann sollte auch die SPI funktionieren.
Fall es aus irgendwelchen Gründen nicht klappt (Errata), könntest du für die SPI Übertragung auf den internen Oszillator wechseln und dann die Übertragung starten.

Gruß
Stefan
Gespeichert

wberger
Full Member
***
Offline Offline

Beiträge: 204


Profil anzeigen
« Antworten #6 am: März 02, 2012, 08:58:07 »

Ich hab auf genau diesem 18F4585 den SPI mit Tmr2 am Laufen. Taktquelle ist bei mir der interne Oszillator. Das sollte aber erst mal kein Problem sein.

Mit der von dir verwendeten Notation bin ich nicht vertraut. T2OUTPS sind 3 Bits und T2CKPS sind 2 Bits. Werden diese durch die verwendete Notation gesetzt?

Bei mir sieht es wie folgt aus:
Code:

T2CON = 0b01111101;  /*
  ||||||**--- Prescaler    01 --> 1:4
  |||||*----- 1=TimerOn
  |****------ Postscaler  - Postscaler does not influence Clock Rate of SPI!
  * --------- not used */
PR2 = 54; // PR2 = 54 results in 18.2 kHz SPI clock rate. (INTOSC + PLL)

SSP1STAT = 0b01000000;
SSP1CON1 = 0b00100011; /* Enable SSP,Timer2 Clock 1/2, CKP 1 (SSP2CON1=0x33)
             ||||****--- Serial Port Mode Select. 0011 -> Clock Tmr2/2
     |||*------- Clock Polarity Select 1: idle state is high. 0: idle state is low
     ||*-------- SSP Enable
     **--------- Overflow and Collision detect bits */

du hast im SSP1CON1 Register den Tmr2 ausgewählt?

Gruß
  Wolfgang
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.033 Sekunden mit 18 Zugriffen.
 
Top! Top!