Forum: Mikrocontroller und Digitale Elektronik PIC16F877A_Problem mit PORTB#


von Alex X. (behindi)


Lesenswert?

Hallo erts mal,

Ich bräuchte Hilfe bei der Programmierung von meinem PIC16F877A, ich 
verwende den gratis Kompiler "microC PRO for PIC" und das PICkit 2. Die 
Platine is von mir aber an der Platine leigt der Fehler nich da ich es 
auch schon auf dem Steckbrett aufgebaut habe.

Das Problem liegt bei dem PORTB, er macht nich das was ich ihm sage. Ich 
vermute dass es am compiler liegt. hier hab ich mal das Programm womitt 
ich den PORTD testete,


void main()
{
 TRISB=0x00;
 TRISD=0x00;


 PORTD=0xff;
 PORTB=0xff;
 while(1) ;

}

PortD funktioniert einwandfrei nur PORTB macht probleme weil sein Bit3 
nicht high wird,


ich hab den µC schon mehrmals ausgetauscht und meine Platine funzt auch 
einwandfrei, die Einstellungen vom Compiler hab ich auch richtig ( PORTD 
funzt einwandfrei )
(PORTB besitzt keine Analog eingänge)


ich hab noch am anhang das Datasheet.

ich freu mich wenn mir jemand einen Ratschlag geben könnte,
Vorerst danke für Beiträge

gruß lex

von AH (Gast)


Lesenswert?

Hast du TRISB Definiert ?

von Alex X. (behindi)


Lesenswert?

Das was ich oben geschrieben hab ist das gesamte Progremm,
den Rest wird wohl der Kompiler machen mit seinen Biliotheken oder?, bei 
den anderen Port funktioniert alles.

von PIC (Gast)


Lesenswert?

Im Datenblatt auf Seite 45 steht:

Dass per default Low Voltage ICSP aktiv ist, und deaktiviert werden 
muss, um PortB,3 als I/O zu nutzen !

von Alex X. (behindi)


Lesenswert?

danke
Auf seite 31 im PDf ist PORTB beschrieben und ja es sind drei pins von 
PORTB are multiplext with the Low Voltage Prgramming funktion, es wird 
jedoch auf dem kapitel von Speciale Feature Section gewiesen.
auf seite 45 hab ich geschaut ( auf beide da ich nicht wusste ob du 
seite 45 vom Adobe meinst oder vom Datenblatt) und hab da nix gefunten,
könntest du mir den Befehl sagen womit ich diese Funktion deaktiviere

danke ( ich weiß mein engl. ist sch.... )

von AH (Gast)


Lesenswert?

Schreib mall über die  main #define   PORTB     0x06

von AH (Gast)


Lesenswert?

Sorry  TRISB natürlich 0x86

von Ben _. (burning_silicon)


Lesenswert?

> PIC16F877A_Problem mit PORTB#
..^^^^^^^^^^ DA ist Dein Problem... ;)

von Alex X. (behindi)


Lesenswert?

DA eingänge besitzt PORTB nicht

von Ben _. (burning_silicon)


Lesenswert?

Ich glaub den hast du nicht verstanden... oder ich den nicht.
Egal! :D

von holger (Gast)


Lesenswert?

>könntest du mir den Befehl sagen womit ich diese Funktion deaktiviere

Vieleicht kennt der Compiler irgendein #pragma um das
Configuration Word im Quellcode einzustellen. Ansonsten findest
du da sicher was im Programmierdialog vom Pickkit2.

von Michael S. (rbs_phoenix)


Lesenswert?

Dafür brauchst du kein Befehl. In mikroC for PIC kannst du die Config so 
einstellen. Da ist oben ein Button wo du auch speichern kannst, das 
Projekt schließen kannst usw. Und da ist auch ein Punkt LVP. Ein 
Dropdownmenü ist darunter wo auch steht dass du den Pin als IO verwenden 
kannst.

Ach.. Bei PICs ist es auch meist so dass die Priorität von LVP, 
ADC-Channels und Comperator über den des IO ist. also das man diese 
DEAKTIVIEREN und alle anderen Module aktivieren muss.

von PIC (Gast)


Lesenswert?

alex le. schrieb:
> könntest du mir den Befehl sagen womit ich diese Funktion deaktiviere

klar, im Ordner C:\Programme\Microchip\MPASM Suite finde ich die Datei 
P16F877A.inc

Und die verrät mir folgendes:

_LVP_OFF  EQU H'3F7F'   ; RB3 is digital I/O, HV on MCLR must be used 
for programming


D.h. einfach   _LVP_OFF mit in die Config Zeile und schon ist RB3 ein 
digital IO.

Die Seitenzahl war die, die tatsächlich unten auf der Seite steht. Nicht 
die vom Reader.

Und Grundsätzlich gilt, wenn ein Port nicht das tut was er soll, dann 
macht es Sinn, im Datenblatt unter "I/O Ports" nachzuschauen. Da ist 
jeder Port und jeder einzelne Pin beschrieben. Und in diesem Fall steht 
bei RB3 eine Fußnote mit dem Hinweis, den ich oben schon erwähnt habe.

von Alex X. (behindi)


Lesenswert?

vielen dank Herr Michael Skropski, ich weiß auch nich wiso ich so blöd 
war und es nicht gesehen hab ( enable und disable ähneln sich zo sehr)
danke jezt funzt es aber jetzt hab ich ein anderes Problem
ich hab dieses Programm raufgeschriefen und

void main() {
int i;
TRISD=0x00;
TRISB=0x00;
while(1)
        {
         PORTD=0x01;
         for(i=0;i<7;i++)
         {
          delay_ms(10);
          PORTD=PORTD<<1;
         }
         delay_ms(10);
         PORTD=0x00;
         PORTB=0x01;

         for(i=0;i<7;i++)
         {
         delay_ms(10);
         PORTB=PORTB<<1;
         }
         delay_ms(10);
         PORTB=0x00;
        }

}




 das problem ist wenn PORTD auf 1000 0000 ist geht er wie gewünscht auf 
0000 0000 aber gleichzeitig sollte PORTB auf 0000 0001 gehen, aber das 
nacht er erst nach der delayPause
 dieses Programm soll ein Lauflicht sein aus PORTD und PORTD und das 
Problem liegt eben bei dem Übergang von PORTD auf PORTB,

hätte da jemand ne idee

danke

mgf

alex

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.