Poprzedni temat «» Następny temat
Własny starter Kit dla PIC16F8xx ??

Czy byłbyś zainteresowany małym Tutorialem wprowadzajączym do procesorów PIC12/16/18 ?
TAK. Chciałbym poznać te CPU.
75%
 75%  [ 3 ]
NIE. Nie czuję potrzeby poznawania tych CPU.
25%
 25%  [ 1 ]
Głosowań: 4
Wszystkich Głosów: 4

Autor Wiadomość
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2010-11-11, 20:05   Własny starter Kit dla PIC16F8xx ??

Otóż buduje sobie własny starterKit do PIC16F84 oraz PIC16F819 i mam pytanie czy tak można skonstruować obwód RESET, aby programować procesor w układzie. Będę używał PICKit 2 na USB.
Edit
Pozostaje jeszcze kwestia PIC16F819 w którym Pin MCRL może być używany jako port, ale tylko wejściowy, wiec wstawię tam JP1.
Czy PICa można zblokować tak jak AVRy że trzeba specjalny programator aby go odblokować :?: Mam nadzieję że te procesory są pozbawione tej ułomności AVRów.

PIC_prog.JPG
Mała poprawka na MCRL / PA5
Plik ściągnięto 19134 raz(y) 10,96 KB

  
 
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
  Wysłany: 2011-10-22, 11:04   

Mała reanimacja tematu.
Czy ktoś może mi udzielić paru wskazówek.
Ale po kolei mam procesor PIC16F1936, che go włożyć do płytki PICDUINO AVT 1625.
Teoretycznie można go tam włożyć, ale co zrobić z portem RC3 który jest podpięty do masy przez kondensator 100nf? znaczy się jak ustawić ten pin portu, aby uniknąć niespodzianek ? jako wyjście w stanie H, czy jak ?
Drugie pytanie raczej dla wyjadaczy C, a konkretnie to kompilatora HI-TECH. Jak ustawić bity konfiguracyjne makrem
Kod:

__CONFIG(x&x&x);

Znaczy sie nie wiem czy dobrze rozumiem jego konstrukcję, bo są dwa rejestry konfigurojace te CPU, czyli należało by to zapisać tak:
Kod:

__CONFIG(1,x&x&x);
__CONFIG(2,x&x&x);


Gdzie w obu przypadkach x to parametry z pliku pic16f1936.h

Cytat:

// Config Register: CONFIG1
#define CONFIG1 0x8007
// Oscillator Selection
// ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin
#define FOSC_ECH 0xFFFF
// ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin
#define FOSC_ECM 0xFFFE
// ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin
#define FOSC_ECL 0xFFFD
// INTOSC oscillator: I/O function on CLKIN pin
#define FOSC_INTOSC 0xFFFC
// EXTRC oscillator: External RC circuit connected to CLKIN pin
#define FOSC_EXTRC 0xFFFB
// HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins
#define FOSC_HS 0xFFFA
// XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins
#define FOSC_XT 0xFFF9
// LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins
#define FOSC_LP 0xFFF8
// Watchdog Timer Enable
// WDT enabled
#define WDTE_ON 0xFFFF
// WDT enabled while running and disabled in Sleep
#define WDTE_NSLEEP 0xFFF7
// WDT controlled by the SWDTEN bit in the WDTCON register
#define WDTE_SWDTEN 0xFFEF
// WDT disabled
#define WDTE_OFF 0xFFE7
// Power-up Timer Enable
// PWRT disabled
#define PWRTE_OFF 0xFFFF
// PWRT enabled
#define PWRTE_ON 0xFFDF
// MCLR Pin Function Select
// MCLR/VPP pin function is MCLR
#define MCLRE_ON 0xFFFF
// MCLR/VPP pin function is digital input
#define MCLRE_OFF 0xFFBF
// Flash Program Memory Code Protection
// Program memory code protection is disabled
#define CP_OFF 0xFFFF
// Program memory code protection is enabled
#define CP_ON 0xFF7F
// Data Memory Code Protection
// Data memory code protection is disabled
#define CPD_OFF 0xFFFF
// Data memory code protection is enabled
#define CPD_ON 0xFEFF
// Brown-out Reset Enable
// Brown-out Reset enabled
#define BOREN_ON 0xFFFF
// Brown-out Reset enabled while running and disabled in Sleep
#define BOREN_NSLEEP 0xFDFF
// Brown-out Reset controlled by the SBOREN bit in the BORCON register
#define BOREN_SBODEN 0xFBFF
// Brown-out Reset disabled
#define BOREN_OFF 0xF9FF
// Clock Out Enable
// CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin
#define CLKOUTEN_OFF 0xFFFF
// CLKOUT function is enabled on the CLKOUT pin
#define CLKOUTEN_ON 0xF7FF
// Internal/External Switchover
// Internal/External Switchover mode is enabled
#define IESO_ON 0xFFFF
// Internal/External Switchover mode is disabled
#define IESO_OFF 0xEFFF
// Fail-Safe Clock Monitor Enable
// Fail-Safe Clock Monitor is enabled
#define FCMEN_ON 0xFFFF
// Fail-Safe Clock Monitor is disabled
#define FCMEN_OFF 0xDFFF


// Config Register: CONFIG2
#define CONFIG2 0x8008
// Flash Memory Self-Write Protection
// Write protection off
#define WRT_OFF 0xFFFF
// 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control
#define WRT_BOOT 0xFFFE
// 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control
#define WRT_HALF 0xFFFD
// 000h to 1FFFh write protected, no addresses may be modified by EECON control
#define WRT_ALL 0xFFFC
// PLL Enable
// 4x PLL enabled
#define PLLEN_ON 0xFFFF
// 4x PLL disabled
#define PLLEN_OFF 0xFEFF
// Stack Overflow/Underflow Reset Enable
// Stack Overflow or Underflow will cause a Reset
#define STVREN_ON 0xFFFF
// Stack Overflow or Underflow will not cause a Reset
#define STVREN_OFF 0xFDFF
// Brown-out Reset Voltage Selection
// Brown-out Reset Voltage (VBOR) set to 1.9 V
#define BORV_19 0xFFFF
// Brown-out Reset Voltage (VBOR) set to 2.5 V
#define BORV_25 0xFBFF
// Low-Voltage Programming Enable
// Low-voltage programming enabled
#define LVP_ON 0xFFFF
// High-voltage on MCLR/VPP must be used for programming
#define LVP_OFF 0xDFFF

Przy czym PLL chę na razie wyłączyć, aby nie puścić sobie przypadkiem CPU na 80MHz i go nie ugotować. :oops:
 
 
     
dondu 



Dołączył: 24 Maj 2005
Posty: 205
Skąd: Śląskie
Wysłany: 2011-10-22, 21:30   

przykład bitów z jednego z moich projektów:

Kod:
// Wersja poprzednia bez PLL
// CONFIG 1
// XINST_OFF        Extension instruction disabled
// INTOSCSEL_LOW    LF-INTOSC is in Low-Power mode during Sleep
// SOSCSEL_LOW         Low-power SOSC circuit is selected
// FOSC_INTIO2        INTIO2 Internal RC oscillator as primary oscyllator
__CONFIG(1, XINST_OFF & INTOSCSEL_LOW & SOSCSEL_LOW & FOSC_INTIO2 );

// CONFIG 2
// WDTEN_OFF        WDT is disabled in hardware (Watch Dog)
// BOREN_OFF         Brown-out Reset is disabled in hardware and software
// PWRTEN_ON        Power-up Timer, start delay 66ms (see 5.6) depends on LF-INTOSC
__CONFIG(2, WDTEN_OFF & BOREN_OFF & PWRTEN_ON);    //

// CONFIG 3
// MCLRE_ON            MCLR pin is enabled; RG5 input pin is disabled
// RTCOSC_SOSCREF    RTCC uses SOSC as a reference clock    (RTCC używa zewnętrznego kwarcu)
__CONFIG(3, MCLRE_ON & RTCOSC_SOSCREF);

// CONFIG 4
// BBSIZ_BB1K        1 kW boot block size
__CONFIG(4, BBSIZ_BB1K);

// CONFIG 5
__CONFIG(5, CP0_OFF & CP1_OFF & CP2_OFF & CP3_OFF & CP4_OFF & CP5_OFF & CP6_OFF & CP7_OFF & CPD_OFF & CPB_OFF);

// CONFIG 6
__CONFIG(6, WRT0_OFF & WRT1_OFF & WRT2_OFF & WRT3_OFF & WRT4_OFF & WRT5_OFF & WRT6_OFF & WRT7_OFF & WRTD_OFF & WRTB_OFF);

//__CONFIG(6, );
//__CONFIG(7, );
 
     
dondu 



Dołączył: 24 Maj 2005
Posty: 205
Skąd: Śląskie
Wysłany: 2011-10-22, 22:07   

Co do pinu i kondensatora zobacz co w procesorze użytym na tej płytce jest na tym pinie i już będziesz wiedział dlaczego ten kondensator tam jest i co z nim zrobić, gdy wstawisz swój uC.

Prawdopodobnie jest to pin VUSB i wszystko już jasne ;)
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2011-10-23, 10:25   

To akurat wiem co tam jest VUSB, Tylko że procesor który ja tam chce wstawić na tym pinie ma port RC3, i nie wiem jak go skonfigurować, aby ten kondensator nie stwarzał problemów, czy nie uszkodził CPU przy swoim przeładowaniu ? Niby AVT w dokumentacji napisało że można wkładać inne CPU np. PIC18f2320, który też ma tam port I/O, ale nie napisali co z nim zrobić, aby uniknąć niespodzianek.
A po twoim przykładzie użycia __CONFIG widzę że programowałeś dosyć rozbudowane CPU.
Co do konfiguracji, to gdzieś czytałem, że skasowanie CPU poleceniem ERASE powoduje ustawienie fabrycznych ustawień, a można jakoś je sobie zgrać ? Bo nigdzie w dokumentacji na razie nie znalazłem ustawień domyślnych/fabrycznych tych bitów ?
Jeszcze jedno pytanie, na zdjeciu niżej widać że muj procesor widnieje jako Midrange/1.8V Min Configuration co to oznacza że do programowania musi być zasilany minimum 1,8Volta ? Bo można w nim włączyć LDO Regulator, ale trzeba wtedy poświęcić jeden pin procesora na kondensator filtrujący Low-ESR i wtedy rdzeń zasilany jest 3,6V, a I/O 5V.

PIC_programer.JPG
Plik ściągnięto 278 raz(y) 135,43 KB

 
 
     
dondu 



Dołączył: 24 Maj 2005
Posty: 205
Skąd: Śląskie
Wysłany: 2011-10-23, 13:39   

kayron napisał/a:
To akurat wiem co tam jest VUSB, Tylko że procesor który ja tam chce wstawić na tym pinie ma port RC3, i nie wiem jak go skonfigurować, aby ten kondensator nie stwarzał problemów, czy nie uszkodził CPU przy swoim przeładowaniu ?

Czyli nie chcesz uwolnić pinu poprzez wylutowanie kondensatora?
To ustaw pin jako wyjście i niezależnie co na nim dasz 1 czy 0 bedzie ok.
Jakie przeładowanie masz na myśli?


kayron napisał/a:
A po twoim przykładzie użycia __CONFIG widzę że programowałeś dosyć rozbudowane CPU.

Ten akurat dotyczy projektu na PIC18F67K90


kayron napisał/a:
Co do konfiguracji, to gdzieś czytałem, że skasowanie CPU poleceniem ERASE powoduje ustawienie fabrycznych ustawień, a można jakoś je sobie zgrać ? Bo nigdzie w dokumentacji na razie nie znalazłem ustawień domyślnych/fabrycznych tych bitów ?

W każdym datasheet mikrokontrolera jest tabelka z bitami: CONFIGURATION BITS AND DEVICE IDs
U ciebie jest to chyba: CONFIGURATION WORD
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2011-10-29, 19:15   

No cóż powoli notuje postępy :razz:
Udało mi się zrobić efekt z nieustraszonego :mrgreen: Na 4 LEDach z PICKITa nie prezentuje się to jakoś wybitnie, ale krok naprzód zawsze jest jakiś.
Filmik
Teraz mogę opanowywać Timery, aby je zagonić do pracy zamiast delaya.
Kod:

#include <htc.h>
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000
#endif

unsigned int i;
unsigned char led;
unsigned char s;
struct{
char kierunek:1;
char znacznik:1;
} bits;

#define kierunek bits.kierunek
#define znacznik bits.znacznik

void main()
{
  TRISC = 0b11100000;
  led = 1;
  PORTC = 15;
  __delay_ms(500);
  s = led;
  znacznik = 0;
  kierunek = 0;
  for (;;)
  {
  PORTC = led;
  if (znacznik == 0){
    if(kierunek == 0)led = 1<<led;
    else led = led>>1;
    led = led | s;
    znacznik = 1;
  }
  else{
    if(kierunek == 0) s = 1<<s;
    else s = s>>1;
    led = s & led;
    znacznik = 0;
    }
  __delay_ms(25);
  if (led == 0)
  {
    kierunek = !kierunek;
    led = 1;
    s = 1;
    __delay_ms(15);
  }
  if (led == 16){
  kierunek = !kierunek;
  __delay_ms(15);
  }
}
}
 
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2011-12-28, 19:45   

Może ktoś mi powie czemu taki program nie daje znaku życia od Timera 0 w PICu16F690 ?
Niby wszystko jest zrobione zgodnie notą kat, a nie mam przerwań od T0 ?
Kompilator HITECH.
Ja na razie mam brak pomysłow co robię nie tak, aby dioda na RC mi zaczęła migać w takt przerwań od T0?
Program sie kompiluje bez żadnych Błędów czy Ostrzeżeń.
PS. Dobra rozgryzłem problem, nie skonfigurowałem sobie właściwe CPU w Configuration Bits. I miałem aktywny WDT non stop.
Cytat:

#include <htc.h>

#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000
#endif

//Definicje dla obsługi portów I/O;
//UWAGA !!! Port C nie posiada Pull-upów. Jeżeli to konieczne
//nalerzy stosować zewnętrzne rezystory podciągające do VDD.
#define RC TRISC
#define RB TRISB
#define RA TRISA // Rejestr kierunku lini I/O portu A;
//UWAGA !!! RA<3> może pełnić tylko rolę wejścia, jeżeli nie jest przypisane
// jako MCLR (External RESET).
#define Pull_A WPUA // Rejestr Pull_upów portu A;
#define INT_A IOCA // Rejestr aktywacji przerwań od portu A;
// Porty są dodatkowo powiązane z rejestrami ANSEL i ANSELH;
// konfigurujacymi tryby analogowe poszczegulnych pinów MCU;

unsigned char wynik;
unsigned char licz;

void interrupt pomiar(void)
{
if(T0IF == 1)
{
TMR0 = 10;
++licz;
if (licz > 8 )
{
licz = 0;
++wynik;
if(wynik > 15) wynik = 0;
}
PORTC = wynik;
T0IF = 0;
}

}

void main()
{
RA = 0b0000001; //RA0 jako wejście
ANSEL = 1; //analogowe
TRISC = 0b11110000;
//PORTC = 0b00001010;
//__delay_ms(500);
wynik = 1;
PORTC = wynik;
licz = 0;
OPTION_REG = 0b10000111;//ustaw preskaler na 256
TMR0 = 10; // wartośc poczatkowa T0
T0IE = 1;
GIE = 1;
for(;;)
{
}
}
 
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2012-01-08, 19:16   

Może mi powiedzieć ktoś dla czego taki zapis:
Kod:

TRISA = 0;
TRISA |= (1<<TRISA0);

zamiast oczekiwanej wartości 1 w rejestrze TRISA daje mi 9 ?
Ostatecznie jak można używać w programie definicji z pliku .h ?
Np. TYCh:
Kod:

// Register: TRISA
volatile unsigned char           TRISA               @ 0x085;
// bit and bitfield definitions
volatile bit TRISA0              @ ((unsigned)&TRISA*8)+0;
volatile bit TRISA1              @ ((unsigned)&TRISA*8)+1;
volatile bit TRISA2              @ ((unsigned)&TRISA*8)+2;
volatile bit TRISA3              @ ((unsigned)&TRISA*8)+3;
volatile bit TRISA4              @ ((unsigned)&TRISA*8)+4;
volatile bit TRISA5              @ ((unsigned)&TRISA*8)+5;
#ifndef _LIB_BUILD
volatile union {
    struct {
        unsigned    TRISA0              : 1;
        unsigned    TRISA1              : 1;
        unsigned    TRISA2              : 1;
        unsigned    TRISA3              : 1;
        unsigned    TRISA4              : 1;
        unsigned    TRISA5              : 1;
    };
} TRISAbits @ 0x085;
#endif
 
 
     
dondu 



Dołączył: 24 Maj 2005
Posty: 205
Skąd: Śląskie
Wysłany: 2012-01-10, 18:07   

kayron napisał/a:
Może mi powiedzieć ktoś dla czego taki zapis:
Kod:

TRISA = 0;
TRISA |= (1<<TRISA0);

zamiast oczekiwanej wartości 1 w rejestrze TRISA daje mi 9 ?

W datasheet pisze dlaczego TRISA3 jest zawsze czytany jako 1.
czytaj: 4.1 PORTA and the TRISA Registers

kayron napisał/a:
... jak można używać w programie definicji z pliku .h ?
Np. TYCh:
Kod:

// Register: TRISA
volatile unsigned char           TRISA               @ 0x085;
// bit and bitfield definitions
volatile bit TRISA0              @ ((unsigned)&TRISA*8)+0;
volatile bit TRISA1              @ ((unsigned)&TRISA*8)+1;
volatile bit TRISA2              @ ((unsigned)&TRISA*8)+2;
volatile bit TRISA3              @ ((unsigned)&TRISA*8)+3;
volatile bit TRISA4              @ ((unsigned)&TRISA*8)+4;
volatile bit TRISA5              @ ((unsigned)&TRISA*8)+5;
#ifndef _LIB_BUILD
volatile union {
    struct {
        unsigned    TRISA0              : 1;
        unsigned    TRISA1              : 1;
        unsigned    TRISA2              : 1;
        unsigned    TRISA3              : 1;
        unsigned    TRISA4              : 1;
        unsigned    TRISA5              : 1;
    };
} TRISAbits @ 0x085;
#endif

na przykład tak:

Kod:
TRISAbits.TRISA3        =    0;
 
     
seg 



Wiek: 38
Dołączył: 17 Sie 2005
Posty: 208
Skąd: PÓŁNOC - POŁUDNIE
Wysłany: 2012-01-15, 10:38   

Nie znam C, ale czy tam nie powinno być "&" zamiast "@"?
 
     
dondu 



Dołączył: 24 Maj 2005
Posty: 205
Skąd: Śląskie
Wysłany: 2012-01-15, 12:55   

Nie.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,11 sekundy. Zapytań do SQL: 16