Ingen output från PIC16F877A

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
BoffBoff
Inlägg: 16
Blev medlem: 4 december 2012, 16:42:52

Ingen output från PIC16F877A

Inlägg av BoffBoff »

Jag har precis lyckats få min 16F877 att fungera, i alla fall så långt att den är programmerbar med PICKit2. Problemet jag har nu är att ens lyckas få utgångarna att fungera som jag vill (jag ska har en 9x3-matris med dioder som jag ska blinka med).

Min väldigt simpla kod ser ut såhär än så länge:

Kod: Markera allt

#include "16F877A.h"
#pragma config |= 0x3ff2

void main( void)
{
   while(1)
   {

       TRISD.0 = 0;
       PORTD.0 = 1;
   }
}
Och mina kopplingar ser ut såhär(ursäkta om det är otydligt, jag har inte kopplat för estetik):

Bild

Bild

Bild
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ingen output från PIC16F877A

Inlägg av sodjan »

"Min väldigt simpla kod" fungerar väldigt sällan.
Du får lägga allt slarv åt sidan och försöka igen.
Du kan knappast ha läst på ordentligt, eller hur?

Är det en 877 eller en 877A ?
BoffBoff
Inlägg: 16
Blev medlem: 4 december 2012, 16:42:52

Re: Ingen output från PIC16F877A

Inlägg av BoffBoff »

Med "min väldigt simpla kod" menar jag att jag börjar med att bara tända en diod, inte att jag har slavat på något sätt. Men jag har inte använt 16F877A förut, endast 16F628 och 16F690, så det kan vara nåt jag inte har förstått än. Det är 877A jag använder.
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Ingen output från PIC16F877A

Inlägg av XCore »

När jag gick över ifrån 628,a eller 690,an till 877 fick jag direkt läsa på om oscillatorn!
Den kräver lite pul med det!

EDIT så du slipper söka runt massor : "No wonder, that you've problems, as the 16F877A doesn't have an internal oscillator. [8|] Have a look to chapter "14.2 Oscillator Configurations" in the datasheet of this PIC to have an overview about your possibilities to clock this PIC."

Du behöver alltså ansluta en sådan först annars kommer din processor inte göra mycket mer än det den gör nu!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ingen output från PIC16F877A

Inlägg av sodjan »

Nej, det var ju *jag* som sa att du slarvar... :-)
Strunt samma...

Sen så framgår det ju inte vad som händer och vad som du
förväntade skulle hända, bara att det inte fungerar "som du vill".

Det framgår inte heller hur din CONFIG ser ut (om man inte
för hand vill avkoda värdet). Kan man inte ange de olika
CONFIG bitarna/funktionerna separat ?

"Snurrar" processorn över huvudtaget ?
Jag ser ingen kristall på bilderna !?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ingen output från PIC16F877A

Inlägg av sodjan »

En 16F887 är helt klart att rekomendera.
Betydligt modernare och med intern oscillator.
Användarvisningsbild
XCore
EF Sponsor
Inlägg: 963
Blev medlem: 31 januari 2009, 03:00:12

Re: Ingen output från PIC16F877A

Inlägg av XCore »

Intern osc är mycket smidigt i ditt stadie då du leker på plattor.
Fördelarna man får ut med en extern är inget du kommer märka i ditt stadie!
(Genom att blinka lite dioder)
Så kör intern osc! :tumupp:
BoffBoff
Inlägg: 16
Blev medlem: 4 december 2012, 16:42:52

Re: Ingen output från PIC16F877A

Inlägg av BoffBoff »

Oj, ja ni märker väl att jag inte har hållt på med det här jättelänge, jag är bättre på programmeringen.

Jag har inte behövt pilla med oscillatorn tidigare, men när jag läste i databladet hittade jag ett läge som använde 'RC oscillator', som verkar vara ganska ett ganska oexakt substitut för en oscillator?
For timing insensitive applications, the “RC” device
option offers additional cost savings. The RC oscillator
frequency is a function of the supply voltage, the
resistor (REXT) and capacitor (CEXT) values and the
operating temperature. In addition to this, the oscillator
frequency will vary from unit to unit due to normal pro-
cess parameter variation. Furthermore, the difference
in lead frame capacitance between package types will
also affect the oscillation frequency, especially for low
CEXT values. The user also needs to take into account
variation due to tolerance of external R and C
components used.
Jag behöver inte så stor exakthet, så detta kanske är ett alternativ? Eller om jag går och köper 877:an istället..
En kristall har jag inte ens en aning om vad det är, så det verkar som att jag har köpt en mindre lämplig processor för min kompetens? Egentligen behöver jag inga inbyggda komponenter alls för det här projektet, utan bara närmre 30 I/O-pinnar, vilket är varför jag köpte den.

Tror ni det är lättare att få den här att fungera eller att köpa en simplare processor, en med intern oscillator osv?
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Ingen output från PIC16F877A

Inlägg av Icecap »

Om du använder RC-oscillator-lösningen kan det fungera helt OK. Den är såklart synnerligt inexakt men är det bara att blinka duger det fint. Du måste dock koppla in ett motstånd och en kondensator enl. databladet.

Sedan är RC-oscillatorn en relik som bara är med för att vara bakåtkompatibelt - men du har ju kretsen i handen just nu så det är lika bra att använda den. Du kan såklart även ha turen att hitta en lämplig kristall i något gammalt skrotelektronik eller kanske en keramisk resonator...

Ska du bygga grejer i framtiden och då inhandla processorer för sånt (eller bara för att leka med) vill jag rekommendera att du väljer PIC med inbyggd 8MHz (eller högre) oscillator, just dom med 8MHz+ är stabila och välfungerande och det är så enkelt att låta bli att behöva bry sig om klockan annars.
BMI
Gått bort
Inlägg: 496
Blev medlem: 31 juli 2006, 22:29:08
Ort: Halmstad

Re: Ingen output från PIC16F877A

Inlägg av BMI »

Glöm inte att skaffa några lämpliga motstånd att koppla till lysdioderna du ansluter till utgångarna !!!!!
BoffBoff
Inlägg: 16
Blev medlem: 4 december 2012, 16:42:52

Re: Ingen output från PIC16F877A

Inlägg av BoffBoff »

Motstånd? Ska det behövas? Aldrig använt det förut, vad skulle det vara för storlek på dem? Mina dioder: https://www.elfa.se/elfa3~se_sv/elfa/in ... _%28t3.%29
Icecap skrev:Om du använder RC-oscillator-lösningen kan det fungera helt OK. Den är såklart synnerligt inexakt men är det bara att blinka duger det fint. Du måste dock koppla in ett motstånd och en kondensator enl. databladet.

Sedan är RC-oscillatorn en relik som bara är med för att vara bakåtkompatibelt - men du har ju kretsen i handen just nu så det är lika bra att använda den. Du kan såklart även ha turen att hitta en lämplig kristall i något gammalt skrotelektronik eller kanske en keramisk resonator...

Ska du bygga grejer i framtiden och då inhandla processorer för sånt (eller bara för att leka med) vill jag rekommendera att du väljer PIC med inbyggd 8MHz (eller högre) oscillator, just dom med 8MHz+ är stabila och välfungerande och det är så enkelt att låta bli att behöva bry sig om klockan annars.
Jag provade att koppla in motstånd och kondensator, och ställa in config-ordet till att använda RC, men jag får bara lite blink på dioden när jag testar anslutningen, inte när jag kör själva programmet. Jag får fortsätta titta på det.

Tack för tipset, jag ska tänka på det till nästa gång!
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Ingen output från PIC16F877A

Inlägg av Icecap »

Motstånden ska hålla kanske 1k om du inte har speciella intensitetskrav. Orsaken till dessa är dels att utgången kan driva 25mA vilket kan döda de LED som bara tål 20mA, detta gäller speciellt högintensitiva.

Dels sker strömbegränsningen i µC'n, det utvecklar värme och kan döda µC'n.

Och jag förstår verkligen att du inte får ut något, du kanske skulle initiera TRIS och slå av evt. analoga funktioner?
BoffBoff
Inlägg: 16
Blev medlem: 4 december 2012, 16:42:52

Re: Ingen output från PIC16F877A

Inlägg av BoffBoff »

I see, jag har ett gäng 1.2k-resistorer som jag kan använda!

Du menar definiera TRIS till rätt adress? Jag har ju en headerfil med, där har jag bl a
#pragma char TRISC @ 0x87
#pragma char TRISD @ 0x88
#pragma char TRISE @ 0x89

Jag uppskattar verkligen all hjälp, vill inget hellre än att bara strippa av alla funktioner jag inte behöver och komma igång :D

Kod: Markera allt

// HEADER FILE
#if !defined ICD_DEBUG  &&  !defined ICD2_DEBUG
 #pragma chip PIC16F877A, core 14, code 8192, ram 32 : 0x1FF

#elif defined ICD2_DEBUG
 #pragma chip PIC16F877A, core 14, code 0x1F00, ram 32 : 0x1FF
 // last 256 locations are reserved for debugging

 //RESERVED RAM LOCATIONS
 char ICD2R1 @ 0x70;
 char reservedICD2[11] @ 0x1E5;  // reserved RAM for ICD2

 #pragma stackLevels 7   // reserve one level for debugging

#else  /* ICD_DEBUG */
 #pragma chip PIC16F877A, core 14, code 0x1F00, ram 32 : 0x1FF
 // NOTE: last 256 locations are reserved for debugging

 //RESERVED RAM LOCATIONS FOR DEBUGGING
 #pragma char ICDR1 @ 0x70
 #pragma char ICDR2 @ 0x1EB
 #pragma char ICDR3 @ 0x1EC
 #pragma char ICDR4 @ 0x1ED
 #pragma char ICDR5 @ 0x1EE
 #pragma char ICDR6 @ 0x1EF

 #pragma stackLevels 7   // reserve one level for debugging

 #pragma cdata[0] = /*NOP*/ 0x0000  // startup instruction
 #pragma resetVector 1    // change to address 1

#endif

#pragma ramdef 0x110 : 0x11F
#pragma ramdef 0x190 : 0x19F
#pragma ramdef  0x70 : 0x7F mapped_into_all_banks

#define INT_gen_style
#define INT_rambank  0   /* interrupt variables in bank 0 */

#pragma config_def 0x1111

#pragma wideConstData

/* Predefined:
  char W;
  char INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB;
  char OPTION, TRISA, TRISB;
  char PCLATH, INTCON;
  bit PS0, PS1, PS2, PSA, T0SE, T0CS, INTEDG, RBPU_;
  bit Carry, DC, Zero_, PD, TO, RP0, RP1, IRP;
  bit RBIF, INTF, T0IF, RBIE, INTE, T0IE, GIE;
  bit PA0, PA1;  // PCLATH
*/

#pragma char PORTC   @ 7
#pragma char PORTD   @ 8
#pragma char PORTE   @ 9

#pragma char PIR1    @ 12
#pragma char PIR2    @ 13
#pragma char TMR1L   @ 14
#pragma char TMR1H   @ 15
#pragma char T1CON   @ 16
#pragma char TMR2    @ 17
#pragma char T2CON   @ 18
#pragma char SSPBUF  @ 19
#pragma char SSPCON  @ 20
#pragma char CCPR1L  @ 21
#pragma char CCPR1H  @ 22
#pragma char CCP1CON @ 23
#pragma char RCSTA   @ 24
#pragma char TXREG   @ 25
#pragma char RCREG   @ 26
#pragma char CCPR2L  @ 27
#pragma char CCPR2H  @ 28
#pragma char CCP2CON @ 29
#pragma char ADRESH  @ 30
#pragma char ADCON0  @ 31

#pragma char TRISC   @ 0x87
#pragma char TRISD   @ 0x88
#pragma char TRISE   @ 0x89

#pragma char PIE1    @ 0x8C
#pragma char PIE2    @ 0x8D
#pragma char PCON    @ 0x8E

#pragma char SSPCON2 @ 0x91
#pragma char PR2     @ 0x92
#pragma char SSPADD  @ 0x93
#pragma char SSPSTAT @ 0x94

#pragma char TXSTA   @ 0x98
#pragma char SPBRG   @ 0x99

#pragma char CMCON   @ 0x9C
#pragma char CVRCON  @ 0x9D
#pragma char ADRESL  @ 0x9E
#pragma char ADCON1  @ 0x9F

#pragma char EEDATA  @ 0x10C
#pragma char EEADR   @ 0x10D
#pragma char EEDATH  @ 0x10E
#pragma char EEADRH  @ 0x10F

#pragma char EECON1  @ 0x18C
#pragma char EECON2  @ 0x18D


#pragma bit  PEIE    @ 11.6  mapped_into_all_banks

#pragma bit  TMR1IF  @ 12.0
#pragma bit  TMR2IF  @ 12.1
#pragma bit  CCP1IF  @ 12.2
#pragma bit  SSPIF   @ 12.3
#pragma bit  TXIF    @ 12.4
#pragma bit  RCIF    @ 12.5
#pragma bit  ADIF    @ 12.6
#pragma bit  PSPIF   @ 12.7

#pragma bit  CCP2IF  @ 13.0
#pragma bit  BCLIF   @ 13.3
#pragma bit  EEIF    @ 13.4
#pragma bit  CMIF    @ 13.6

#pragma bit  TMR1ON  @ 16.0
#pragma bit  TMR1CS  @ 16.1
#pragma bit  T1SYNC_ @ 16.2
#pragma bit  T1OSCEN @ 16.3
#pragma bit  T1CKPS0 @ 16.4
#pragma bit  T1CKPS1 @ 16.5

#pragma bit  T2CKPS0 @ 18.0
#pragma bit  T2CKPS1 @ 18.1
#pragma bit  TMR2ON  @ 18.2
#pragma bit  TOUTPS0 @ 18.3
#pragma bit  TOUTPS1 @ 18.4
#pragma bit  TOUTPS2 @ 18.5
#pragma bit  TOUTPS3 @ 18.6

#pragma bit  SSPM0   @ 20.0
#pragma bit  SSPM1   @ 20.1
#pragma bit  SSPM2   @ 20.2
#pragma bit  SSPM3   @ 20.3
#pragma bit  CKP     @ 20.4
#pragma bit  SSPEN   @ 20.5
#pragma bit  SSPOV   @ 20.6
#pragma bit  WCOL    @ 20.7

#pragma bit  CCP1M0  @ 23.0
#pragma bit  CCP1M1  @ 23.1
#pragma bit  CCP1M2  @ 23.2
#pragma bit  CCP1M3  @ 23.3
#pragma bit  CCP1Y   @ 23.4
#pragma bit  CCP1X   @ 23.5

#pragma bit  RX9D    @ 24.0
#pragma bit  OERR    @ 24.1
#pragma bit  FERR    @ 24.2
#pragma bit  ADDEN   @ 24.3
#pragma bit  CREN    @ 24.4
#pragma bit  SREN    @ 24.5
#pragma bit  RX9     @ 24.6
#pragma bit  SPEN    @ 24.7

#pragma bit  CCP2M0  @ 29.0
#pragma bit  CCP2M1  @ 29.1
#pragma bit  CCP2M2  @ 29.2
#pragma bit  CCP2M3  @ 29.3
#pragma bit  CCP2Y   @ 29.4
#pragma bit  CCP2X   @ 29.5

#pragma bit  ADON    @ 31.0
#pragma bit  GO      @ 31.2
#pragma bit  CHS0    @ 31.3
#pragma bit  CHS1    @ 31.4
#pragma bit  CHS2    @ 31.5
#pragma bit  ADCS0   @ 31.6
#pragma bit  ADCS1   @ 31.7

#pragma bit  PSPMODE @ 0x89.4
#pragma bit  IBOV    @ 0x89.5
#pragma bit  OBF     @ 0x89.6
#pragma bit  IBF     @ 0x89.7

#pragma bit  TMR1IE  @ 0x8C.0
#pragma bit  TMR2IE  @ 0x8C.1
#pragma bit  CCP1IE  @ 0x8C.2
#pragma bit  SSPIE   @ 0x8C.3
#pragma bit  TXIE    @ 0x8C.4
#pragma bit  RCIE    @ 0x8C.5
#pragma bit  ADIE    @ 0x8C.6
#pragma bit  PSPIE   @ 0x8C.7

#pragma bit  CCP2IE  @ 0x8D.0
#pragma bit  BCLIE   @ 0x8D.3
#pragma bit  EEIE    @ 0x8D.4
#pragma bit  CMIE    @ 0x8D.6

#pragma bit  BOR_    @ 0x8E.0
#pragma bit  POR_    @ 0x8E.1

#pragma bit  SEN     @ 0x91.0
#pragma bit  RSEN    @ 0x91.1
#pragma bit  PEN     @ 0x91.2
#pragma bit  RCEN    @ 0x91.3
#pragma bit  ACKEN   @ 0x91.4
#pragma bit  ACKDT   @ 0x91.5
#pragma bit  ACKSTAT @ 0x91.6
#pragma bit  GCEN    @ 0x91.7

#pragma bit  BF      @ 0x94.0
#pragma bit  UA      @ 0x94.1
#pragma bit  RW_     @ 0x94.2
#pragma bit  S       @ 0x94.3
#pragma bit  P       @ 0x94.4
#pragma bit  DA_     @ 0x94.5
#pragma bit  CKE     @ 0x94.6
#pragma bit  SMP     @ 0x94.7

#pragma bit  TX9D    @ 0x98.0
#pragma bit  TRMT    @ 0x98.1
#pragma bit  BRGH    @ 0x98.2
#pragma bit  SYNC    @ 0x98.4
#pragma bit  TXEN    @ 0x98.5
#pragma bit  TX9     @ 0x98.6
#pragma bit  CSRC    @ 0x98.7

#pragma bit  CM0     @ 0x9C.0
#pragma bit  CM1     @ 0x9C.1
#pragma bit  CM2     @ 0x9C.2
#pragma bit  CIS     @ 0x9C.3
#pragma bit  C1INV   @ 0x9C.4
#pragma bit  C2INV   @ 0x9C.5
#pragma bit  C1OUT   @ 0x9C.6
#pragma bit  C2OUT   @ 0x9C.7

#pragma bit  CVR0    @ 0x9D.0
#pragma bit  CVR1    @ 0x9D.1
#pragma bit  CVR2    @ 0x9D.2
#pragma bit  CVR3    @ 0x9D.3
#pragma bit  CVRR    @ 0x9D.5
#pragma bit  CVROE   @ 0x9D.6
#pragma bit  CVREN   @ 0x9D.7

#pragma bit  PCFG0   @ 0x9F.0
#pragma bit  PCFG1   @ 0x9F.1
#pragma bit  PCFG2   @ 0x9F.2
#pragma bit  PCFG3   @ 0x9F.3
#pragma bit  ADCS2   @ 0x9F.6
#pragma bit  ADFM    @ 0x9F.7

#pragma bit  RD      @ 0x18C.0
#pragma bit  WR      @ 0x18C.1
#pragma bit  WREN    @ 0x18C.2
#pragma bit  WRERR   @ 0x18C.3
#pragma bit  EEPGD   @ 0x18C.7
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Ingen output från PIC16F877A

Inlägg av Icecap »

Varför lägger du in den filen? Du ska inkludera den i projektet, sedan ska du läsa i databladet hur du använder portarna osv. varefter du skriver det som ska skrivas.
BoffBoff
Inlägg: 16
Blev medlem: 4 december 2012, 16:42:52

Re: Ingen output från PIC16F877A

Inlägg av BoffBoff »

Det är precis så jag gör, inkluderar den och använder portarna
Skriv svar