Sida 1 av 4
Ingen output från PIC16F877A
Postat: 6 december 2012, 12:06:11
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):

Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 12:12:41
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 ?
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 12:21:40
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.
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 12:28:55
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!
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 12:36:38
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 !?
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 12:39:43
av sodjan
En 16F887 är helt klart att rekomendera.
Betydligt modernare och med intern oscillator.
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 12:41:18
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!

Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 13:22:47
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?
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 13:32:55
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.
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 13:56:37
av BMI
Glöm inte att skaffa några lämpliga motstånd att koppla till lysdioderna du ansluter till utgångarna !!!!!
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 14:04:24
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!
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 14:17:16
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?
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 14:40:44
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
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
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 14:46:05
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.
Re: Ingen output från PIC16F877A
Postat: 6 december 2012, 14:57:14
av BoffBoff
Det är precis så jag gör, inkluderar den och använder portarna