Отговори на тема  [ 41 мнения ]  Отиди на страница Предишна  1, 2, 3
LED isn`t Blinking! 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
tolstolob написа:
Пробва ли да закоментираш
Код:
if ('a' == data)
?

Не съм още.Искам първо да пробвам кода който предложихте в реален ПИК.Имам чувството,че Proteus sim не винаги показва нещата реално.


Пет Авг 22, 2014 5:02 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
dsp300 написа:
tolstolob написа:
Пробва ли да закоментираш
Код:
if ('a' == data)
?

Не съм още.Искам първо да пробвам кода който предложихте в реален ПИК.Имам чувството,че Proteus sim не винаги показва нещата реално.

Закоментирах - диода светна и изгасна! Сега обаче нещата съвсем ми се объркаха!Може ли да ми обясните или посочите линк откъдето да разбера защо код,който е обявен като коментар,всъщност участвува в схемата!


Пет Авг 22, 2014 5:40 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: LED isn`t Blinking!
Коментарите просто се отсвирват и от тях код не се компилира.


Пет Авг 22, 2014 5:45 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
След закоментиране на if ('a' == data) ,диода започва да свети от всеки въведен символ!Целта на задачата за която поисках помощ ,беше LED1 да свети от точно определен символ!


Съб Авг 23, 2014 10:56 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: LED isn`t Blinking!
Погледни си флаговете! Таблицата също! 'а' е 61
if (61 == data)


Съб Авг 23, 2014 11:25 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: LED isn`t Blinking!
timt написа:
Погледни си флаговете! Таблицата също! 'а' е 61
if (61 == data)

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


Съб Авг 23, 2014 1:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: LED isn`t Blinking!
@dsp300, Почна ли да Blinkin-а
До къде стигна?


Пон Авг 25, 2014 9:41 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
timt написа:
@dsp300, Почна ли да Blinkin-а
До къде стигна?


Промених целия код и компилатора включително.Сега работи и на Proteus sim и на реален pic18.Proteus след Reset ми позволява отново да въвеждам символ и диода свети.Това обаче не се случваше с предишния код ,дори и след като бе модифициран!Да не говорим,че в реален pic изобщо диода не светваше.За съжаление функцията Delay10KTCYx(250);не гаси диода.Сега ще се опитвам да го гася чрез Timer0.Това е новият код:
/* Main.c file generated by New Project wizard
*
* Created: 26.08. 2014
* Processor: PIC18F2550
* Compiler: MPLAB XC8
*/



#include <p18f2550.h>
#include <xc.h>
#include <delays.h>
#include <portb.h>
#include <usart.h>
#include <stdio.h>
#include <stdlib.h>

//** CONFIGURATION ******************************************************************************************


#pragma config PLLDIV = 5 // (20 MHz crystal)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = ON // USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
// #pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
// #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming
#pragma config XINST = OFF // Extended Instruction Set
#pragma config CP0 = OFF
#pragma config CP1 = OFF
// #pragma config CP2 = OFF
// #pragma config CP3 = OFF
#pragma config CPB = OFF
// #pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
// #pragma config WRT2 = OFF
// #pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot Block Write Protection
#pragma config WRTC = OFF
// #pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
// #pragma config EBTR2 = OFF
// #pragma config EBTR3 = OFF
#pragma config EBTRB = OFF


//******************************DECLARATION OF GLOBAL VARIABLES*************************

char data;


//******************************Declaration of Function Prototype***************************
char ReadUSART( void );
void WriteUSART( char data );

//****************************************************************************************

// LED Setings:
#define setpin() TRISB = 0; // Set all pins to output
#define LED1 LATBbits.LATB0 // RB1
#define LED1_on()LED1 = 1; // High
#define LED1_off()LED1 = 0; // Low


//***************************************************************





void main(void)
{
setpin();
// configure USART
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW & USART_ADDEN_OFF, 32);
/*
USART_TX_INT_OFF = 0b00000000 // Transmit interrupt off
USART_RX_INT_OFF = 0b00000000 // Receive interrupt off
USART_SYNCH_MODE = 0b00000000 // Asynchronous mode
USART_EIGHT_BIT = 0b11111101 // 8-bit data
USART_CONT_RX = 0b00001000 // Continuous reception
USART_BRGH_LOW = 0b11111111 // Baud rate
USART_ADDEN_OFF = 0b11011111
SPBRG = 32
*/
baudUSART(BAUD_IDLE_CLK_HIGH & BAUD_8_BIT_RATE & BAUD_WAKEUP_OFF & BAUD_AUTO_ON & BAUD_IDLE_RX_PIN_STATE_HIGH & BAUD_IDLE_TX_PIN_STATE_HIGH);
/*
BAUD_IDLE_CLK_HIGH = 0 // Idle state for clock is a high level
BAUD_8_BIT_RATE = 0b00000000 // 8-bit baud generation rate
BAUD_WAKEUP_OFF = 0b00000000 // RX pin not monitored
BAUD_IDLE_RX_PIN_STATE_HIGH = 0b11011111 // Idle state for RX pin is high level
BAUD_IDLE_TX_PIN_STATE_HIGH = 0b11101111 // Idle state for TX pin is high level
*/


/* To set up USART */
RCSTAbits.SPEN = 1; // Serial port is enabled
PORTCbits.RC7 = 1; // Input coming from Rx pin
PORTCbits.RC6 = 0; // Output meaning write to Tx pin
TXSTA = 0b00100000; // Configurations for transmit register
RCSTA = 0b10010000; // Configurations for receive register
BAUDCON = 0b00000000;

//******************************Configuration TIMER0****************************************

unsigned int counter = 0; // Variable that holds timer overflow count
// Initialize Timer0
T0CON = 0b11000111;
//T0CONbits.TMR0ON = 1; // Enables Timer0
//T0CONbits.T08BIT = 1; // Timer0 is configured as an 8-bit timer/counter
//T0CONbits.T0CS = 1; // Select timer module with external clock
//T0CONbits.PSA = 0; // Assignet prescaler to Timer0
//T0CONbits.T0PS2 = 1; // Timer0 Prescaler Select bits
//T0CONbits.T0PS1 = 1; // Increment overy 256
//T0CONbits.T0PS0 = 1;



//**********************************************************************************************

while(1) // Create Loop
{

while(DataRdyUSART()); // Is data available in the read buffer?
PORTB = ReadUSART(); // Read a byte out of the USART receive buffer and send it to PORTB /
if(ReadUSART()=='1') // If the received data is equal to the '1'
{
LED1_on(); // LED blinking
Delay10KTCYx(250); // Това не работи
LED1_off(); // LED off

}

}
}


Вто Авг 26, 2014 12:59 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 02, 2008 10:24 pm
Мнения: 105
Мнение Re: LED isn`t Blinking!
още в началото,

първо пишеш OpenUsart(..), после по надолу мааш директно по регистрите

RCSTAbits.SPEN = 1; // Serial port is enabled
PORTCbits.RC7 = 1; // Input coming from Rx pin
PORTCbits.RC6 = 0; // Output meaning write to Tx pin
TXSTA = 0b00100000; // Configurations for transmit register
RCSTA = 0b10010000; // Configurations for receive register
BAUDCON = 0b00000000;

тука не е ясно защо променяш порта,
трябва да се промени трис-а, ама според даташита ,
най-вероятно функцията OpenUsart() вече го е направила, ...
мешавица..


гледай сега какво пише във даташита:
The pins of the Enhanced USART are multiplexed
with PORTC. In order to configure RC6/TX/CK and
RC7/RX/DT/SDO as an EUSART:
• SPEN bit (RCSTA<7>) must be set (= 1)
• TRISC<7> bit must be set (= 1)
• TRISC<6> bit must be set (= 1)
Note: The EUSART control will automatically
reconfigure the pin from input to output as
needed.

защо не погледнеш тази функция OpenUsart() какво прави като сорс
за mcc18 се казва OpenUSART() и се намира примерно в
C:\Program Files\Microchip\mplabc18\v3.40\src\pmc_common\USART\uopen.c


после като дойде байт, четеш регистъра RCREG със ReadUSART(), ама само ЕДИН път де,
второто четене ще даде 0 !!!


после за mcc18 функцията е,
char DataRdyUSART(void)
{
if(PIR1bits.RCIF) // If RCIF is set
return 1; // Data is available, return TRUE
return 0; // Data not available, return FALSE
}
( не вервам на XC8 да е обратно )

връща 1 когато има получен символ,
какво чакаш на
while(DataRdyUSART()); // Is data available in the read buffer?
не е ясно

този лооп изобщо не прави това което очакваш..


Вто Авг 26, 2014 4:00 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: LED isn`t Blinking!
Едва ли е от компилатора. При мен работеше даже мислех да заредя един ПИК за пробата но все не ми остава време.


Вто Авг 26, 2014 8:06 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
Комбинацията от таймера на tolstolob + промяна на първоначалния ми код + xc8 compiler създадоха код който работи както на Proteus 8.1 sim,така и на реален pic18f2550.Благодаря на всички за желанието да помогнат.



* Created: 26.08.2014
* Processor: PIC18F2550
* Compiler: MPLAB XC8
**********************************************************************************************************


#include <p18f2550.h>
#include <xc.h>
#include <delays.h>
#include <portb.h>
#include <usart.h>
#include <stdio.h>
#include <stdlib.h>

//** CONFIGURATION *********************************************************************************************************


#pragma config PLLDIV = 5 // (20 MHz crystal)
--------------------------

// LED Setings:
#define setpin() TRISB = 0; // Set all pins to output
#define LED1 LATBbits.LATB1 // RB1
#define LED1_on()LED1 = 1; // High
#define LED1_off()LED1 = 0; // Low


//*********************************************************************************************************

void main(void)
{
setpin();

// configure USART
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW & USART_ADDEN_OFF, 32);
/*
USART_TX_INT_OFF = 0b00000000 // Transmit interrupt off
USART_RX_INT_OFF = 0b00000000 // Receive interrupt off
USART_SYNCH_MODE = 0b00000000 // Asynchronous mode
USART_EIGHT_BIT = 0b11111101 // 8-bit data
USART_CONT_RX = 0b00001000 // Continuous reception
USART_BRGH_LOW = 0b11111111 // baud rate
USART_ADDEN_OFF = 0b11011111
SPBRG = 32
*/
baudUSART(BAUD_IDLE_CLK_HIGH & BAUD_8_BIT_RATE & BAUD_WAKEUP_OFF & BAUD_AUTO_ON & BAUD_IDLE_RX_PIN_STATE_HIGH & BAUD_IDLE_TX_PIN_STATE_HIGH);
/*
BAUD_IDLE_CLK_HIGH = 0 // Idle state for clock is a high level
BAUD_8_BIT_RATE = 0b00000000 // 8-bit baud generation rate
BAUD_WAKEUP_OFF = 0b00000000 // RX pin not monitored
BAUD_IDLE_RX_PIN_STATE_HIGH = 0b11011111 // Idle state for RX pin is high level
BAUD_IDLE_TX_PIN_STATE_HIGH = 0b11101111 // Idle state for TX pin is high level
*/


/* To set up USART */
RCSTAbits.SPEN = 1; // Serial port is enabled
PORTCbits.RC7 = 1; // Input coming from Rx pin
PORTCbits.RC6 = 0; // Output meaning write to Tx pin ??
TXSTA = 0b00100000; // Configurations for transmit register
RCSTA = 0b10010000; // Configurations for receive register
BAUDCON = 0b00000000;

//********************************************************************************************************************
#define TIME_BLINK 0x1E8480 // Time dеlay
static unsigned long blinkTimer = 0;


while (1) // Create Loop
{

if (0 != PIR1bits.RCIF) // Have you received byte
{

if (0 != (RCSTA & 0x06)) // Yes, and any errors we have?
{

RCSTAbits.CREN = 0; // Yes, clean them, but no valid byte
(void) RCREG;
(void) RCREG;
RCSTAbits.CREN = 1;
}
else
{

unsigned char data = RCREG; // No errors, adopted byte is valid

//if ('1' == data)
{
PORTB = data;
LED1_on();
blinkTimer = TIME_BLINK;
}
}
}

if (1 < blinkTimer)
{
blinkTimer--;
}
else
{
if (1 == blinkTimer)
{

LED1_off(); // Timer has expired.
blinkTimer = 0; // Stop the timer
}
}
}
}


Сря Авг 27, 2014 12:36 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 41 мнения ]  Отиди на страница Предишна  1, 2, 3

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни