Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Smoke test in proteus #2

Open
dvv opened this issue Sep 16, 2016 · 5 comments
Open

Smoke test in proteus #2

dvv opened this issue Sep 16, 2016 · 5 comments

Comments

@dvv
Copy link

dvv commented Sep 16, 2016

Hello!

I built two nodes:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#include "clunet.h"

void data_received(uint8_t address, uint8_t command, char* data, uint8_t size)
{
  DDRD |= 32; PORTD ^= 32;
}

int main (void)
{
  clunet_init();
  clunet_set_on_data_received(data_received);

  char buffer[1];
  buffer[0] = 1;
  _delay_ms(300);
  clunet_send(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_MESSAGE, 50, buffer, sizeof(buffer));

  while (1)
  {
      clunet_send(98, CLUNET_PRIORITY_INFO, 50, "b", 1);
      _delay_ms(400);
  }
  return 0;
}

and the same with the only diffs as: first delay 400ms, looping clunet_send to node 99, second delay 300.

Both PD2 connected, pulled up to VCC.

I see no activity on PD5 used to flash on receipt -- https://gyazo.com/6a340ae6cee2ae8832ab2110c3a81e64

Wonder what I do wrong?

TIA,
--Vladimir

@dudanov
Copy link
Member

dudanov commented Sep 20, 2016

Привет. Вы из России, поэтому отвечаю на русском.
Во-первых, желательно убеждаться всякий раз перед вызовом clunet_send, что предыдущий пакет отправлен при помощи вызова clunet_ready_to_send, иначе, если пакет не отправлен, то происходит остановка передачи и перезапись буфера передачи новыми данными. Понимаю, что при задержке 400 мсек 1 байт должен был уйти и не один раз.
Во-вторых, вопрос, при компиляции были ли настроены адреса устройств в файле clunet_config? Работает ли callback функция по получению всех пакетов? Она регистрируется вызовом clunet_set_on_data_received_sniff.

@dvv
Copy link
Author

dvv commented Sep 20, 2016

Адреса разные, но шлю в broadcast.
Sniff не работает.
Нет вероятности, что линия вечно занята из-за того, что узлы безусловно шлют причину своего старта (при одновременном старте оба могут войти в состояние ожидания)?

@dvv
Copy link
Author

dvv commented Sep 20, 2016

Подскажите, для atmega328p, timer2, правильные настройки?

// Timer initialization in NORMAL MODE
#define CLUNET_TIMER_INIT { TCCR2B = (1 << CS22); }
// Timer prescaler (for autocalculate T period)
#define CLUNET_TIMER_PRESCALER 64
// Main Register
#define CLUNET_TIMER_REG TCNT2
// Output Compare Register
#define CLUNET_TIMER_REG_OCR OCR2A
// Overflow Condition (used in bootloader only)
#define CLUNET_TIMER_OVERFLOW (TIFR2 & (1 << TOV2))
// Reset Overflow Flag Command (used in bootloader only)
#define CLUNET_TIMER_OVERFLOW_CLEAR { TIFR2 = (1 << TOV2); }
// Reset Output Compare Flag Command
#define CLUNET_CLEAR_OCF { TIFR2 = (1 << OCF2A); }
// Enable timer compare interrupt (reset output compare flag & enable interrupt)
#define CLUNET_ENABLE_OCI { TIMSK2 |= (1 << OCIE2A); }
// Disable timer compare interrupt
#define CLUNET_DISABLE_OCI { TIMSK2 &= ~(1 << OCIE2A); }

#define CLUNET_INT_ENABLE() { EIFR = (1 << INTF0); EIMSK |= (1 << INT0); }
#define CLUNET_INT_DISABLE() { EIMSK &= ~(1 << INT0); }
#define CLUNET_INT_INIT() { EICRA |= (1 << ISC00); EICRA &= ~(1 << ISC01); CLUNET_INT_ENABLE(); }

@dvv
Copy link
Author

dvv commented Sep 21, 2016

Удалось добиться коммуникации.
Тут пара трансиверов передают возрастающее число с разными периодами (первый раз в 2033 мс, второй раз в 1020 мс): https://gyazo.com/ae9b11938d74093df89e4b4837a44761
Видно, что первый приемник имеет пропуски через 4 посылки (и в *sniff тоже).

@hobit26
Copy link

hobit26 commented Jun 7, 2017

У меня 2.0 в протеусе не запустилась, хотя оригинальная версия прекрасно работает

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants