Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Prosty keyer - problem
SP6RGB Offline
Robert

Liczba postów: 6
Dołączył: 11-10-2015
Post: #1
Prosty keyer - problem
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);
    }
}

Robert
08-01-2016 10:41
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
Prosty keyer - problem - SP6RGB - 08-01-2016 10:41
RE: Prosty keyer - problem - SP6LUN - 08-01-2016, 12:07
RE: Prosty keyer - problem - SP9RQA - 08-01-2016, 12:23
RE: Prosty keyer - problem - SP6RGB - 08-01-2016, 14:01
RE: Prosty keyer - problem - SP6RGB - 10-01-2016, 19:07

Skocz do:


Użytkownicy przeglądający ten wątek: 3 gości