HomeMade
Prosty keyer - problem - Wersja do druku

+- HomeMade (http://sp-hm.pl)
+-- Dział: Oprogramowanie (/forum-84.html)
+--- Dział: Technika programowania mikroprocesorów (/forum-85.html)
+--- Wątek: Prosty keyer - problem (/thread-2539.html)



Prosty keyer - problem - SP6RGB - 08-01-2016 10:41

Witam.
Do swojej Libry chcę włożyć prosty klucz na ATTiny. Napisałem prościutki programik i na płytce uruchomieniowej chodzi poprawnie nadawanie kresek i kropek oraz zwiększanie tempa. Nie chce natomiast chodzić zmniejszanie tempa. I nie mogę załapać dlaczego. W C jak niżej dopiero startuję. W C na Arduino zrobiłem dosyć rozbudowany klucz z różnymi opcjami wg dokładnie takiego samego schematu i zero problemów. Jak ktoś ma pomysł to dzięki z góry.

sp6rgb

Kod:
//Klucz telegraficzny - wyjscie na LED i wejście KEY TRX
//Wersja z regulacja tempa  przyciskami
#include <avr/io.h>
#include <util/delay.h>

#define PIN_KROPKA  (1<<PB0)                //Wejscie PB0jako przycisk kropek
#define PIN_KRESKA  (1<<PB1)                //Wejscie PB1 jako przycisk kresek
#define PIN_PLUS (1<<PB2)            //Wejscie zwiekszenia tempa
#define PIN_MINUS (1<<PB3)            //Wejscie zmniejszenia tempa
#define PIN_KEY (1<<PB4)                //Wyjscie do sterowania TRX
#define PIN_LED (1<<PB5)                //Wyjscie sygnalizacji optycznej nadawania

uint16_t  tempo = 150;                        //Zmienna do ustawiania tempa nadawania
                                            //Im wieksza tym wolniejsze nadawanie
//Deklaracje funkcji

void kropkiNadawanie(uint16_t tempoF);
void kreskiNadawanie(uint16_t tempoF);
void zmienneDelay(uint16_t tempoF);

int main ( void )
{
  DDRB &= ~(PIN_KROPKA | PIN_KRESKA | PIN_PLUS | PIN_MINUS);     //Ustawienie wejsc
  DDRB |= PIN_KEY | PIN_LED;                                    //Ustawienie wyjsc
  PORTB |= PIN_KROPKA | PIN_KRESKA | PIN_PLUS | PIN_MINUS;        //Podciagniecie wejsc


  while(1)
  {
      if (!(PINB & PIN_KROPKA))        kropkiNadawanie(tempo); //Nacisniety kropki to kropkiNadawanie
      if (!(PINB & PIN_KRESKA))          kreskiNadawanie(tempo); //Nacisniety kreski to kreskiNadawanie
      if (!(PINB & PIN_MINUS))                                //Nacisniety PIN_MINUS
      {
          ++tempo;                                            //to zwiekszamy wartosc zmiennej tempo
          if (tempo >= 200) tempo = 200;
          _delay_ms(10);
      }
      if (!(PINB & PIN_PLUS))                                //Nacisniety PIN _PLUS to zmniejszamy
      {
          --tempo;
          if (tempo < 50) tempo = 50;
          _delay_ms(10);
      }
  }
}

//Definicje funkcji

void kropkiNadawanie(uint16_t tempoF)
{
    PORTB &= ~PIN_LED;                            //Zalaczenie LED i sterowania TRX
    zmienneDelay(tempoF);                        //na czas okreslony przez zmienna tempo
    PORTB |= PIN_LED;
    zmienneDelay(tempoF);                        //czas pomiedzy znakami równy kropce
}

void kreskiNadawanie(uint16_t tempoF)
{
    PORTB &= ~PIN_LED;
    zmienneDelay(tempoF*3);                        //Kreska równa trzem kropkom
    PORTB |= PIN_LED;
    zmienneDelay(tempoF);                       //Przerwa miedzy kreskami rowna kropce
}

void zmienneDelay(uint16_t tempoF)
{
    while(tempoF--)
    {
    _delay_ms(1);
    }
}



RE: Prosty keyer - problem - SP6LUN - 08-01-2016 12:07

Witam!
To może być problem hardware'owy. Zamień port PIN_MINUS z PIN_PLUS.


RE: Prosty keyer - problem - SP9RQA - 08-01-2016 12:23

Nie jestem dobry w debugowaniu cudzych kodów, ale czy do kompilacji podałeś F_CPU?
Masz jakieś warningi w czasie kompilacji?


RE: Prosty keyer - problem - SP6RGB - 08-01-2016 14:01

Dzięki za szybkie odpowiedzi. Docelowo klucz ma być na ATTiny45, a teraz testuję program na płytce ATB 1.04 ATNEL z ATmega32. Programowanie bezpośrednio z Eclipse (z pluginem do AVR) na podłączonej płytce. F_CPU jest OK. Wszystkie inne programy chodzą. Co prawda jestem jeszcze "zielony" w tej materii i mogę robić jakieś głupie błędy. Warningów nie ma. Czysto po kompilacji.
Przetestuję wieczorem trochę zmian.


RE: Prosty keyer - problem - SP6RGB - 10-01-2016 19:07

Problem był hardware'owy ( celna uwaga SP6LUN - TNX). Na innym procesorze działa. I wgrany już i działa z docelowym ATTiny45.
Pozdrawiam.