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

Проблем с MikroC Pro и Proteus
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=10323
Страница 1 от 1

Автор:  Nikolai [ Сря Юли 18, 2012 10:28 am ]
Заглавие:  Проблем с MikroC Pro и Proteus

Здравейте, имам следния проблем значи вчера се опитах да подкарам ds1307 като за целта си направих една схема в Протеус с PIC18F4550, един двуредов LCD и RTC-to. Исках просто на дсиплея да се изписват секундите от часовника като преди тях излезне надпис "Seconds:". При стартиране на симулация в Протеус виждам секундите в I2C Debugger-a и когато те се подават към дисплея като десетични числа се показват след 21-вата секунда като започват от удивителен знак и се изреждат. Но когато реша да ги преобразувам в ascii символи с функцията IntToStr. Настъпва голямо объркване първо, няма последователност във визулазирането на символи, появява се един удивителен знак допълнително и си стои постоянно. Освен това и в двата случая когато подавам към дисплея и десетични и ASCII символи позицията на дисплея не съответства на стойноста която съм задал във функцията за визуализиране. Аз му пиша на девета позиция да се появи символа той излиза на 10-та, пиша 11-та позизия той въобще не се появява. И в Протеуса и в проекта ми тактовите честоти са еднакви 8MHz, осцилатора е HS в MikroC-то. Къде може да е проблема ?

Код:
unsigned short r_data;

char output;


sbit LCD_RS at RC1_bit;
sbit LCD_EN at RC2_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISC1_bit;
sbit LCD_EN_Direction at TRISC2_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;


unsigned short read_ds1307(unsigned short address)

{
  unsigned short r_data;
  I2C1_Init(100000);
  I2C1_Start();
  I2C1_Wr(0xD0);
  I2C1_Wr(address);
  I2C1_Repeated_Start();
  I2C1_Wr(0xD1);
  r_data=I2C1_Rd(0);
  I2C1_Stop();
  return(r_data);
}
    text_out(){
    Lcd_Init();
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
    Lcd_Out(1,1, "Seconds:");
           }

void main()
{
while(1){




    read_ds1307(0);
    IntToStr(r_data,output);
    text_out();
    Lcd_Out(1,9,output);
    Delay_ms(1000);


         }
}

Автор:  Cekins [ Сря Юли 18, 2012 12:37 pm ]
Заглавие:  Re: Проблем с MikroC Pro и Proteus

RTFM :)

Всички регистри в DS1307 са в BCD формат. Нормално е да ти излизат странни работи. Позициите на дисплея пък не е задължително да са там където си мислиш. Примерно има 16х1 дисплеи, които реда започва от позиция 0 и до 8-ия символ е 7-ма позиция, 9-ти символ вече се води на вотри ред (хардуерно в дисплея е на позиция 64) - един вид се държи като 8х2. Затова не е зле да прочетеш и документацията на дисплея и да го видиш точно как са разположени символите в паметта му.

едит : освен това е тъпо да чакаш 1 секунда за следващото четене. В ДС-а има регистър който можеш да му настроиш какво да ти вади на SQW изхода - може да се настрои на 1Hz, подаваш го към пин с прекъсване и когато имаш прекъсване да си го четеш. Ама още по-умно е при първоначален старт да си прочиташ ртц-то, и после само да си инкрементваш на всяка секунда някаква променлива пак със прекъсването. Така ще спестиш излишно четене на ртц-то през 1 секунда.

Автор:  Stoimen [ Сря Юли 18, 2012 8:20 pm ]
Заглавие:  Re: Проблем с MikroC Pro и Proteus

Не успях да видя къдя глобалната r_data получава върната от read_ds1307() стоиност.

Автор:  a_stankov [ Чет Юли 19, 2012 3:21 pm ]
Заглавие:  Re: Проблем с MikroC Pro и Proteus

Да добавя, не разчитай сляпо на Протеус-а, имал съм случай в който код не тръгва като симулация на Протеус, а на платка си бачка идеално, и обратното.

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