PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschied zw. PIC 16F877 & PIC16F877A



lion1984
15.10.2005, 17:35
Hiho liebe Robogemeinde,

ich habe folgendes programm geschrieben:



#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOLVP,NOPROTECT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#org 0x1F00, 0x1FFF {} //Bootloader



void main() {

for(;;)
{
output_d(0x00);
delay_ms(250);
output_high(PIN_B0);
delay_ms(250);
output_low(PIN_B0);

delay_ms(250);
output_high(PIN_B1);
delay_ms(250);
output_low(PIN_B1);

delay_ms(250);
output_high(PIN_b2);
delay_ms(250);
output_low(PIN_b2);

delay_ms(250);
output_high(PIN_b3);
delay_ms(250);
output_low(PIN_b3);

delay_ms(250);
output_high(PIN_b4);
delay_ms(250);
output_low(PIN_b4);

delay_ms(250);
output_high(PIN_b5);
delay_ms(250);
output_low(PIN_b5);

delay_ms(250);
output_high(PIN_b6);
delay_ms(250);
output_low(PIN_b6);


delay_ms(250);
output_high(PIN_b7);
delay_ms(250);
output_low(PIN_b7);
}
}



Es soll ein lauflicht sein auf PORT B bzw D (hatte es vorher mit PORT D), es sollte eine LED nach der anderen ein und ausgeschaltet werden, mein Problem ist, dass der PIC am PORT D nur 4 LEDS einschaltet und am PORT B nur 3 und dann neustartet. könnt ihr mir weiterhelfen?

bei einem PIC16F877A funkt es problemlos, mein PIC16F877 ist 4 Mhz beschränkt und ich benütze einen 4 Mhz Oszilator.

der Schaltplan ist hier hinterlegt:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=12918&highlight=

XDavidX
15.10.2005, 18:22
Hi,
Ich programmiere in Assembler und da muss man die Ports definieren
(als Aus/Eingang).
Muss man das bei der Hochsprache nicht?
Oder ist es das hier : output_d(0x00); (in deinem Programm)
Wenn ja dann hast du dich vertippt (_d statt _b)

Gruß David

lion1984
15.10.2005, 18:26
hiho,

danke für den hinweiß, ich hatte im programm TRIS gesetzt (ist es für ein/ausgang) warum es hier nicht dabei ist, weiß ich nicht. unD wegen D und B, ist nicht vertippt, ich hatte es vorher am PORT D, und jetzt auf PORT B, weil ich gedacht habe, vielleicht hat der PORT was

XDavidX
15.10.2005, 18:35
Stell doch mal das Ganze Programm rein.
So wie es in deinem Pic ist (Port B).
Dann kann man dir evtl. besser helfen.

Gruß David

lion1984
15.10.2005, 18:43
hier bitteschön:

aber wie gesagt, das selbe wie oben, nur 1 zeile weniger, wahrscheinlich vergesssen mitzukopieren:



#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOLVP,NOPROTECT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#org 0x1F00, 0x1FFF {} //Bootloader



void main() {
set_tris_B(0x00);

for(;;)
{
output_d(0x00);
delay_ms(250);
output_high(PIN_B0);
delay_ms(250);
output_low(PIN_B0);

delay_ms(250);
output_high(PIN_B1);
delay_ms(250);
output_low(PIN_B1);

delay_ms(250);
output_high(PIN_b2);
delay_ms(250);
output_low(PIN_b2);

delay_ms(250);
output_high(PIN_b3);
delay_ms(250);
output_low(PIN_b3);

delay_ms(250);
output_high(PIN_b4);
delay_ms(250);
output_low(PIN_b4);

delay_ms(250);
output_high(PIN_b5);
delay_ms(250);
output_low(PIN_b5);

delay_ms(250);
output_high(PIN_b6);
delay_ms(250);
output_low(PIN_b6);


delay_ms(250);
output_high(PIN_b7);
delay_ms(250);
output_low(PIN_b7);
}
}

lion1984
17.10.2005, 11:16
hiho,

das problem hat sich geändert :)
es ist der PORT B Pin 4, wenn ich ein stück draht nehme, dieses an den PORTPIN anhalte reset der PIC, ohne auf der gegensstelle was zu haben.
weiters wenn ich output_B(0xff) benütze, startet er auch neu, wenn ich den code wie oben beütze, funktionert es nur das die LED am PIN 4 nicht leuchtet, einen draht ran und er startet neu.
hoffe das mir jmd helfen kann.

PicNick
17.10.2005, 11:30
Beim 877 ist ja PortB.3 der PGM-Pin für die Low-Voltage-Programmierung.
Jetzt weiß ich aber nicht, ob du das LVP nicht eh' abgedreht hast
Ich weiß auch nicht, wie der Pin auf Mißhandlung reagiert.

lion1984
17.10.2005, 12:06
hallo,

ich wußte, das es für programmierung ist, aber ich dachte, zumindest glaubte ich, dass man den weiters also normalen I/O PIN verwenden kann wenn man LVP nicht aktiv hat, und was verstehst du unter Mißhandlung? ich tue ja nicht ausser versuchen den anzusteuern :)

PicNick
17.10.2005, 12:15
wenn du im "__config" (fuses) den LVP abgedreht hast (und auch in den PIC übertragen hast ?) ist das schon ok. Hätt ja sein können, wenn er geheimnisvoll restartet.
Mit PinB4 hätt' das aber nix zu tun.
*murmel*
Blöde Frage: Reset ist hoch-gepullt ?

lion1984
17.10.2005, 12:21
hiho.

naja, es ist PIN 4 wenn man bei 1 beginnt, und nicht 0-7.
ja der ist mit 10k hochgepullt, so hab ich es zumindest gelesen, getestetn und hat funktioniert.

PicNick
17.10.2005, 12:35
Ahso. Dann ist es also doch der PGM-Pin PB3 (von 0-7) Pin36 am IC
Dann isses doch was mit dem LVP.
Ich bin mit der PIC-erei nicht mehr so firm, weil mir der Brennerkult auf den Geist gegangen ist.
Aber irgendwie mußt du ihm die Fuses gezielt setzen.

lion1984
17.10.2005, 12:36
okay, danke, es ist der pin, werde mal gucken wenn ich wieder von zivi daheim bin :) wenn nicht schmeiß ich ds ganze beim fenster hinaus :)

thx für die hilfe

lion1984
17.10.2005, 14:52
hiho:=) ´
ich bin es wieder,also ich bin jetzt daheim und der RESET ist mit 10k , und LVP ist abgeschaltet, war es immer schon, war im code zum lesen, habe es aber auch nciht gefunden, was kann das sonst sein? wenn ich ein drahtstück mit +5 oder GND verbinde macht er diese macken nicht, nur wenn es frei hängt oder über R + LED an GND geht. habs schon an mehreren PICs versucht.

lion1984
18.10.2005, 21:08
Huho,

dankke für eure hilfen, ich hab den fehler gefunden, und zwar ich verwende einen bootloader, der mir die fuses auf LVP ON einstellt und meine fuses im programm ignoriert, beim brenner programm die fuse weggeben und es funkt einwandfrei, also doch LVP :)