Forum: Mikrocontroller und Digitale Elektronik Problem mit CS erzeugung bei PIC18f4320


von Paul (Gast)


Lesenswert?

Hi,
nachdem ich nun das Problem mit MPLAB gelöst habe, habe ich schon wieder 
ein anderes Problem.
Ich möchte ein Chip-Select Signal erzeugen und dieses zunächst auf eine 
konstante 1 setzten.
In der Simulation funktioniert das alles bestens, nur bei der 
Echtzeitmessung am PICDEM2 Board von Microchip messe ich mit dem 
Oszillographen lediglich „einen“ Peak, statt einer konstanten 1.
Die Frage ist nun, warum der PIC mein CS nicht dauerhaft auf 1 setzt, 
sondern wieder zurück auf 0?

Hier der aktuelle Code:
1
#include <p18f4320.h>
2
#include <stdio.h>
3
4
#define ad_cs LATEbits.LATE0
5
6
#pragma code
7
void main (void)
8
{
9
  ADCON0=0x00;    //Inchip A/D wandler ausgeschalten mit Bit0=0
10
  ADCON1=0x3F;    //3 = Verwendung von Referenzspannung
11
            //F = Alle Portpins auf Digital I/O, 
12
  
13
  TRISE = 0x02;  //Port E Pin 1 = Eingang, rest Ausgang
14
  
15
  PORTE = 0x00;
16
  ad_cs = 1;
17
18
  while (1){
19
    
20
  }
21
}

von klaus (Gast)


Lesenswert?

Wie Dir bereits bei www.fernando-heitor.de geantwortet wurde, sollte auf 
PORTE nur lesend zugegriffen werden. Zum Setzen der Portpegel den LATE 
verwenden.
Lass dieses PORTE = 0x00; einfach mal weg.

Da Du den A/D abgeschaltet hast, kann ich in der Software auch keine 
weiteren Fehlerquellen ausmachen. Wenn es dann immer noch nicht läuft 
ist Deine Hardware womöglich buggy.

von klaus (Gast)


Lesenswert?

Oh und nochwas:

Womöglich optimiert der Compiler die leere while-Schleife weg, somit 
würde der Controller direkt nach dem Setzen von PIN_E0 in den Sleepmodus 
gehen. Dies könnte ebenfalls den kurzen "Peak" erklären. Schau Dir mal 
das Assemblerlisting an!

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.