Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

MPLAB C18 Delay проблем
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=3424
Страница 1 от 1

Автор:  gdh [ Сря Дек 13, 2006 11:14 pm ]
Заглавие:  MPLAB C18 Delay проблем

Някой дали може да удари едно рамо. Реших да пробвам въпросния компилатор но ударих на камък в началото още. Проблема е следния: опитвам се да замигам един светодиод на пин RA1 на 18F4580

Вместо диода да загасне след определеното закъснение той свети постоянно. Така както е написано в кода който следва диода свети бледо, а ако вместо 10 подам 20 като параметър на Delay100TCYx свети по ярко 8O . Предполагам съм изтървал някоя инициализация но нещо не успявам да открия коя. Хич не мога да си обясня връзката между закъснението и силата на светене :?

Хардуера е вързан правилно, с CCSC нямам проблеми.

Код:
#include <p18f4580.h>
#include <delays.h>

#pragma config OSC = IRCIO67 //Internal oscillator block, port function on RA6 and RA7
#pragma config FCMEN = ON    //Fail-Safe Clock Monitor enabled 
#pragma config IESO = OFF    //Oscillator Switchover mode enabled 
#pragma config PWRT = ON     //PWRT enabled 
#pragma config BOREN = OFF   //Brown-out Reset disabled in hardware and software
#pragma config BORV = 0      //Maximum Setting
#pragma config WDT = OFF     //WDT disabled (control is placed on the SWDTEN bit)
#pragma config WDTPS = 512   //1:512
#pragma config MCLRE = ON    //MCLR pin enabled; RE3 input pin disabled
#pragma config LPT1OSC = ON  //Timer1 configured for low-power operation
#pragma config PBADEN = OFF  //PORTB<4> and PORTB<1:0> Configured as Digital I/O Pins on Reset
#pragma config DEBUG = OFF   //Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
#pragma config XINST = OFF   //Instruction set extension and Indexed Addressing mode enabled
#pragma config BBSIZ = 1024  //1K words (2K bytes) Boot Block 
#pragma config STVREN = ON   //Stack full/underflow will cause Reset
#pragma config CPD = OFF     //Data EEPROM not code-protected
#pragma config WRTD = OFF    //Data EEPROM not write-protected 
#pragma config CPB = OFF     //Boot block (000000-0007FFh) not code-protected
#pragma config WRTB = OFF    //Boot block (000000-0007FFh) not write-protected
#pragma config EBTRB = OFF   //Boot block (000000-0007FFh) not protected from table reads executed in other blocks
#pragma config CP0 = OFF     //Block 0 (000800-001FFFh) not code-protected
#pragma config CP1 = OFF     //Block 1 (002000-003FFFh) not code-protected 
#pragma config CP2 = OFF     //Block 2 (004000-005FFFh) not code-protected
#pragma config CP3 = OFF     //Block 3 (006000-007FFFh) not code-protected 
#pragma config WRT0 = OFF    //Block 0 (000800-001FFFh) not write-protected
#pragma config WRT1 = OFF    //Block 1 (002000-003FFFh) not write-protected
#pragma config WRT2 = OFF    //Block 2 (004000-005FFFh) not write-protected 
#pragma config WRT3 = OFF    //Block 3 (006000-007FFFh) not write-protected
#pragma config WRTC = OFF    //Configuration registers (300000-3000FFh) not write-protected
#pragma config EBTR0 = OFF   //Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
#pragma config EBTR1 = OFF   //Block 1 (002000-003FFFh) not protected from table reads executed in other bloc
#pragma config EBTR2 = OFF   //Block 2 (004000-005FFFh) not protected from table reads executed in other blocks
#pragma config EBTR3 = OFF   //Block 3 (006000-007FFFh) not protected from table reads executed in other blocks

void delay_ms(unsigned int iCnt)
{
  unsigned int i;
  for(i=0;i<iCnt;i++) Delay1KTCYx(2);
}

void main (void)
{
  OSCCON = 0b01110000;
 
 
 
  /* Reset the LEDs */
  PORTA  = 0b00000000;
  ADCON1 = 0b00001110;
  CMCON  = 0b00000111;
  TRISA  = 0b11111101;
 
  PORTAbits.RA1 = 1;
  Delay100TCYx(10);
  //delay_ms(5);
  PORTAbits.RA1 = 0;
  //delay_ms(500);
}

Автор:  nik [ Сря Дек 13, 2006 11:45 pm ]
Заглавие: 

промяната в силата на светене говори за две неща
1. мени се коефициента на запълване
2. честотата е доста по висока от колкото очакваш

така като гледам програмата трябва да зададеш закъснение преди и след загасването на светодиода, за да свети половин секунда и след това да не свети още толкова, после трябва да си изчислиш при твоя кварц точно колко ще ти е времето на закъснение, защото и в момента светодиода мига, но прекалено бързо за да го видиш

Автор:  Cvetanov [ Сря Дек 13, 2006 11:52 pm ]
Заглавие: 

щом един път свети слабо а след това по-силно следва че в крайна сметка мига но прекалено бързо

//ЕДИТ
докато съм писал @nik е отговорил

Автор:  gdh [ Сря Дек 13, 2006 11:59 pm ]
Заглавие: 

Не, няма мигане. Светенето е постоянно и слабо. Както се вижда от кода няма цикли.
Пробвах и да пиша в LATА вместо PORTA и пак същия резултат.

Автор:  Cvetanov [ Чет Дек 14, 2006 12:24 am ]
Заглавие: 

щом свети по-слабо значи мига.

сложи
Код:
for(;;);
накрая на main да видим тогава какво ще се получи

Автор:  Gogo [ Чет Дек 14, 2006 8:26 am ]
Заглавие: 

Пробвай така:
Код:
while   (1)
  {
  PORTAbits.RA1 = 1;
  Delay100TCYx(10);
  //delay_ms(5);
  PORTAbits.RA1 = 0;
  //delay_ms(500);
  }

Освен това, след като свалиш пина в "0", трябва да поставиш още едно закъснение.
А това: delay_ms(500); не е вярно - стойността в скобите не може да е по-голяма от 255 (unsigned char).

Автор:  gdh [ Чет Дек 14, 2006 11:44 am ]
Заглавие: 

Gogo написа:
Пробвай така:
Код:
while   (1)
  {
  PORTAbits.RA1 = 1;
  Delay100TCYx(10);
  //delay_ms(5);
  PORTAbits.RA1 = 0;
  //delay_ms(500);
  }

Освен това, след като свалиш пина в "0", трябва да поставиш още едно закъснение.
А това: delay_ms(500); не е вярно - стойността в скобите не може да е по-голяма от 255 (unsigned char).


Основния проблем не е, че не мига диода а че не мога да го загася след като съм го запалил

LATAbits.LATA1 = 1;
Delay100TCYx(10);
LATAbits.LATA1 = 0;

Това би трябвало да накара диода да светне за съвсем кратко време, обаче той или свети постоянно когато увелича закъснението :? или свети слабо когато намаля или махна нацяло закъснението. Това е след последните ми опити.

Нещо не инициализирам пустия порт като хората и предполагам че някой модул смущава изхода на пин-а.

Съгласен съм че дори като свети силно диода като че ли трепти така че има някакво премигване. Първоначално си мислех че се ресетва и от това е трептенето ама сложих един Sleep на края и е без промяна

Трябва да се чете даташита основно ама все не остава време. Няма ли някой дето тоя проблем да му звучи познато

Автор:  Syrius-B [ Чет Дек 14, 2006 11:47 am ]
Заглавие: 

В разпитване и разговори също се губи време, и не по-малко.....
Така че, по-добре чети!

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/