реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> c8051f350 и мои странности, ===================
nikmel
сообщение Mar 17 2008, 19:36
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 17-03-08
Пользователь №: 35 985



есть c8051f350...пытаюсь сделать простое мигание диодом.
в кейле создал проект со стартапом и собственно мой код:

Код
#include "c8051f350.h"

sbit LED=P1^0;

void main()
{
  unsigned char i;
  XBR1=0x40;
  LED=0;      
  for(i=0;i!=0xff;++i);
  LED=1;
  while(1);
}


P1MDOUT по дефолту 0 - то что надо, ибо нужен сток (диод зажигаю нулём)
P1MDIN по дефолту 1 - то что надо, ибо цифровой вход/выход
XBR1 - выставляю 1 на активизацию матрицы, дабы порт включился.
дальше зажигаю диод, потом жду и выключаю его. я планировал увидеть потушеный диод, а получаю зажжёный причём: чем меньше пауза, тем тусклее он горит. смотрел мультиметром на нём напряжения не то, не сё...в общем от паузы зависят...даже если поставить подряд две команды:
Код
LED=0;
LED=1;

то диод едва уловимо зажигается...

только не пинайте! 05.gif
Go to the top of the page
 
+Quote Post
alvol
сообщение Mar 18 2008, 11:35
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 15-05-06
Из: Николаев
Пользователь №: 17 119



Цитата(nikmel @ Mar 17 2008, 21:36) *
есть c8051f350...пытаюсь сделать простое мигание диодом.
в кейле создал проект со стартапом и собственно мой код:

Код
#include "c8051f350.h"

sbit LED=P1^0;

void main()
{
  unsigned char i;
  XBR1=0x40;
  LED=0;      
  for(i=0;i!=0xff;++i);
  LED=1;
  while(1);
}


P1MDOUT по дефолту 0 - то что надо, ибо нужен сток (диод зажигаю нулём)
P1MDIN по дефолту 1 - то что надо, ибо цифровой вход/выход
XBR1 - выставляю 1 на активизацию матрицы, дабы порт включился.
дальше зажигаю диод, потом жду и выключаю его. я планировал увидеть потушеный диод, а получаю зажжёный причём: чем меньше пауза, тем тусклее он горит. смотрел мультиметром на нём напряжения не то, не сё...в общем от паузы зависят...даже если поставить подряд две команды:
Код
LED=0;
LED=1;

то диод едва уловимо зажигается...

только не пинайте! 05.gif


кажется активировать матрицу это еще не все, нужно, например, направление порта ввода-вывода указать, использовать как аналоговый или цифровой вывод
на сайт есть удобная программа, которая формирует исходник для инициализации
Silabs
Толи Configuration Wizard, толи Configuration Code Wizard.
Удачи.
Go to the top of the page
 
+Quote Post
Kopa
сообщение Mar 18 2008, 11:53
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



А чем не устраивает демо пример с oт Sylabs? ( на диске с отладочной платой для их кеila)

Код

//-----------------------------------------------------------------------------
// Blinky.c
//-----------------------------------------------------------------------------
// Copyright 2005 Silicon Laboratories, Inc.
//
// AUTH: BD
// DATE: 06 FEB 04
//
// This program flashes the green LED on the C8051F35x target board about
// five times a second using the interrupt handler for Timer2.
//
// Target: C8051F35x
//
// Tool chain: KEIL Eval 'c'
//

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f350.h>                    // SFR declarations

//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F35x
//-----------------------------------------------------------------------------

sfr16 TMR2RL   = 0xca;                    // Timer2 reload value
sfr16 TMR2     = 0xcc;                    // Timer2 counter

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------

#define SYSCLK       24500000 / 8         // SYSCLK frequency in Hz

sbit LED = P0^7;                          // LED='1' means ON
sbit SW2 = P1^0;                          // SW2='0' means switch pressed

//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void Timer2_Init (int counts);
void Timer2_ISR (void);

//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void) {

   // disable watchdog timer
   PCA0MD &= ~0x40;                       // WDTE = 0 (clear watchdog timer
                                          // enable)

   SYSCLK_Init ();                        // Initialize system clock
   PORT_Init ();                          // Initialize crossbar and GPIO
   Timer2_Init (SYSCLK / 12 / 10);        // Init Timer2 to generate
                                          // interrupts at a 10Hz rate.

   EA = 1;                                            // enable global interrupts

   while (1) {                            // spin forever
   }
}

//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
// This routine initializes the system clock to use the internal 24.5MHz / 8
// oscillator as its clock source.  Also enables missing clock detector reset.
//
void SYSCLK_Init (void)
{
   OSCICN = 0x80;                         // configure internal oscillator for
                                          // its lowest frequency
   RSTSRC = 0x04;                         // enable missing clock detector
}

//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Configure the Crossbar and GPIO ports.
// P0.7 - LED (push-pull)
//
void PORT_Init (void)
{
   XBR0     = 0x00;                       // no digital peripherals selected
   XBR1     = 0x40;                       // Enable crossbar and weak pull-ups
   P0MDOUT |= 0x80;                       // enable LED as a push-pull output
}

//-----------------------------------------------------------------------------
// Timer2_Init
//-----------------------------------------------------------------------------
//
// Configure Timer2 to 16-bit auto-reload and generate an interrupt at
// interval specified by <counts> using SYSCLK/48 as its time base.
//
void Timer2_Init (int counts)
{
   TMR2CN  = 0x00;                        // Stop Timer2; Clear TF2;
                                          // use SYSCLK/12 as timebase
   CKCON  &= ~0x60;                       // Timer2 clocked based on T2XCLK;

   TMR2RL  = -counts;                     // Init reload values
   TMR2    = 0xffff;                      // set to reload immediately
   ET2     = 1;                           // enable Timer2 interrupts
   TR2     = 1;                           // start Timer2
}

//-----------------------------------------------------------------------------
// Interrupt Service Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Timer2_ISR
//-----------------------------------------------------------------------------
// This routine changes the state of the LED whenever Timer2 overflows.
//
void Timer2_ISR (void) interrupt 5
{
   TF2H = 0;                              // clear Timer2 interrupt flag
   LED = ~LED;                            // change state of LED
}
Go to the top of the page
 
+Quote Post
nikmel
сообщение Mar 18 2008, 15:24
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 17-03-08
Пользователь №: 35 985



2 alvol:
пользовался ей для проверки.

2 Кора:
у меня нет отладочной платы и соответственно диска с примерами =D ...

PCA0MD &= ~0x40;

единственное что может мне помочь, ибо я watchdog-а не отключал, а
xbr0 - (как я уже писАл) по умолчанию 0
xbr1 - у меня инициализируется
pmdout - мне нужен open drain, а он по умолчанию стоит

надеюсь получится...спасибо rolleyes.gif
Go to the top of the page
 
+Quote Post
Kopa
сообщение Mar 19 2008, 04:35
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



Цитата(nikmel @ Mar 18 2008, 18:24) *
у меня нет отладочной платы и соответственно диска с примерами =D ...


Спрашивайте, если смогу помочьsmile.gif
У меня работа с данным контроллером в планах.
С архитектурой данного контроллера интенсивно еще не работал.

P.S. В качестве пробы,
мигание светодиодом пробовал делать используя Форт (Forth) язык.
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Mar 19 2008, 07:33
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата(nikmel @ Mar 18 2008, 17:24) *
2 Кора:
у меня нет отладочной платы и соответственно диска с примерами =D ...

IDE Silabs можно скачать с их сайта. С примерами.
Go to the top of the page
 
+Quote Post
nikmel
сообщение Mar 26 2008, 14:10
Сообщение #7





Группа: Новичок
Сообщений: 3
Регистрация: 17-03-08
Пользователь №: 35 985



да, теперь всё работает...никогда бы не подумал что по умолчанию watchdog включён, скорее им чаще не пользуются, нежели пользуются...спасибо за ответ! smile.gif
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Mar 27 2008, 07:34
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Поздравляю! Очередное подтверждение тезиса: читайте доку, не ленитесь. Сам с Силабсами наступал на грабли. Использовали C8051F040, так у него в зависимости от режима SPI (3х или 4х-проводный) ездили по кроссбару прочие устройства.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 08:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016