ATtiny13: откуда этот дребезг

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 24, 2009 22:25:36
Откуда: Russia

Сообщение fox15 »

Привет господа Кошаки :)

Не могу понять, откуда "дребезг" ? :shock:
С тестового устройства (AT89S8253) подаются импульсы с частотой 52.74 Гц на ATtiny13 ножка PB3 "PINB3_bit", программа в цикле опрашивает эту ножку и выдает то, что на ней на выход "PORTB0_bit" ножка PB0. Вот собственно сам коТ программы, просто тестовая программка.

// MCU: ATtiny13
// Dev.Board: EasyAVR5A
// Oscillator: Internal Clock 4.8000 MHz
// SW: mikroC PRO for AVR
// PINB3_bit - D1 (CH1)
// PORTB0_bit - D2 (CH2)

void main()
{
// Port B initialization
DDRB = 0b00000001; // set PORTB as Output PB0
PORTB = 0b00000000; // clear PORTB
while (1)
{
PORTB0_bit = PINB3_bit;
}
}

В прикрепленном файле данные с осциллографа, D1 и D2 с анализатора, CH1 и CH2 - "живые" сигналы.
Я так понимаю должно быть CH1=CH2 и D1=D2, ан нет :cry:
Почему такая несправедливость ? :evil:
Вложения
a1.jpg
(70.41 КБ) 324 скачивания
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

мне так вообще непонятно, что это за конструкция PORTB0_bit = PINB3_bit; это на каком таком диалекте Си вы пишите?

я бы сделал так:

Код: Выделить всё

while(1) {
   if(PINB & (1<<PB3))
      PORTB |= (1<<PB0);
   else
      PORTB &= ~(1<<PB0);
}
а если вы пишите на CodeVision CVAVR, то наверное так:

Код: Выделить всё

while(1) PORTB.0 = PINB.3;
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

mikroC PRO for AVR
ужос ужос, спасите меня от этава ))))
такого диалекта и я не знаю )
Но сделайте как ARV говорит. это универсально
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 24, 2009 22:25:36
Откуда: Russia

Сообщение fox15 »

Да дело не в этом это просто синтаксис MicroC.
Я использую отладочный стенд EasyAVR5A от Mikroelektronika мне удобно пользоваться этим компилятором.
Я могу написать эту конструкцию и подругому, дело не в этом, это ничего неизменит.

Вот собственно егошная библиотека гласит:
sbit PORTB0_bit at PORTB.B0;

Непонятно почему контроллер так себя ведет ?
Если в цикле я присвою чистую 1, то на выходе будет соответственно высокий уровень и без всякого дребезга, а стоит подать импульсы, так на тебе. :cry:
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 24, 2009 22:25:36
Откуда: Russia

Сообщение fox15 »

.....
ужос ужос, спасите меня от этава ))))
такого диалекта и я не знаю )
Но сделайте как ARV говорит. это универсально
.....

Ну чего здесь ужасного-то ?
Ужас это когда компилятор непонимает драйвера USB программатора, кроме как программаторов COM и LPT.
И что мне предлагаете ?
MicroC компилирует и прошивает сразу, все пучком, синтаксис дело привычки, конечно им его еще отлаживать и отлаживать.
Но дело не в синтаксисе
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

А общий провод тестового устройства и Tiny13 соединить не забыли? и какой длины сигнальный провод, все-таки у прямоугольника оочень широкий спектр, провод и резонировать на ВЧ может и отраженный сигнал по нему туда сюда бегать будет.
Последний раз редактировалось DrWatson Пт июл 17, 2009 22:14:18, всего редактировалось 1 раз.
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

fox15 писал(а):Вот собственно егошная библиотека гласит:
sbit PORTB0_bit at PORTB.B0;
ваша беда в том, что вы пользуетесь фичами своего компилятора, которые далеко отстоят от стандартных конструкций Си - поэтому вас многие просто не понимают. я вот не понимаю, что это за объявление и к чему оно приведет. посмотрите в листинг, что получается из этого оператора в ассемблерных командах - наверняка сразу поймете, в чем дело.

имхо, чем больше фич, тем больше проблем. чем ближе к простому - тем меньше проблем.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 24, 2009 22:25:36
Откуда: Russia

Сообщение fox15 »

ARV писал(а): посмотрите в листинг, что получается из этого оператора в ассемблерных командах - наверняка сразу поймете, в чем дело.
имхо, чем больше фич, тем больше проблем. чем ближе к простому - тем меньше проблем.
Вот он коТ: :roll:

main:
LDI 27, 255
OUT 93, 27
LDI 27, 0
OUT 94, 27
;GPWM.c,9 :: void main()
;GPWM.c,12 :: DDRB = 0b00000001; // set PORTB as Output PB0
LDI 27, 1
OUT 55, 27
;GPWM.c,13 :: PORTB = 0b00000000; // clear PORTB
LDI 27, 0
OUT 56, 27
;GPWM.c,15 :: while(1)
L_main0:
;GPWM.c,17 :: PORTB0_bit = PINB3_bit;
SBIS 54, 3
CBI 56, 0
SBIC 54, 3
SBI 56, 0
;GPWM.c,18 :: PORTB.B0 = PINB.B3;
SBIS 54, 3
CBI 56, 0
SBIC 54, 3
SBI 56, 0
;GPWM.c,19 :: }
JMP L_main0
;GPWM.c,21 :: }
L_endmain:
JMP L_endmain
; end of _main


Судя по листингу обе конструкции совершенно идентичные
PORTB0_bit = PINB3_bit;
PORTB.B0 = PINB.B3;
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

Беру на себя смелость сказать что Ваш компилятор не правильно строит низкоуровневые команды ибо как мне кажется двойная перепроверка состояния вывода является избыточной.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 24, 2009 22:25:36
Откуда: Russia

Сообщение fox15 »

OBIVAN писал(а):Беру на себя смелость сказать что Ваш компилятор не правильно строит низкоуровневые команды ибо как мне кажется двойная перепроверка состояния вывода является избыточной.
Да пёс с ним, компилятор непричем, при исследовании сигнала выяснилось, что идут всплески скважностью 240 нс и размахом всего 240 мВ и этого хватает для срабатывания. Сразу я незаметил, т.к. такие незначительные всплески анализатор и я считали обычной помехой (анализатор я когда-то настроил на CMOS логику вот он и незаметил 240 мВ), а у меня просто опыта нету, т.к. только только начал с этим возиться.
Сигналы эти я формировал на другом стенде, (AT89S8253) контроллер примитивный и ШИМ формировался чисто программно, стало быть эти ели заметные провалы - издержки программных задержек алгоритма формирования ШИМ

На рисунке видно выбросы, на них реагирует D2 и после настройки анализатора реагирует D1

Вообщем сам виноват :?

Тема закрыта
8)
Вложения
a2.jpg
(66.32 КБ) 517 скачиваний
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

fox15 писал(а):Судя по листингу обе конструкции совершенно идентичные
PORTB0_bit = PINB3_bit;
PORTB.B0 = PINB.B3;
кстати, и совершенно идентичные первому варианту кода, более традиционному.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»