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
SP6LUN Offline
Andrzej
****

Liczba postów: 254
Dołączył: 01-09-2014
Post: #2
RE: Prosty keyer - problem
Witam!
To może być problem hardware'owy. Zamień port PIN_MINUS z PIN_PLUS.

Andrzej
(Ten post był ostatnio modyfikowany: 08-01-2016 12:07 przez SP6LUN.)
08-01-2016 12:07
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP9RQA Offline
Krzysztof
****

Liczba postów: 380
Dołączył: 30-09-2009
Post: #3
RE: Prosty keyer - problem
Nie jestem dobry w debugowaniu cudzych kodów, ale czy do kompilacji podałeś F_CPU?
Masz jakieś warningi w czasie kompilacji?
08-01-2016 12:23
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6RGB Offline
Robert

Liczba postów: 6
Dołączył: 11-10-2015
Post: #4
RE: Prosty keyer - problem
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.

Robert
08-01-2016 14:01
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6RGB Offline
Robert

Liczba postów: 6
Dołączył: 11-10-2015
Post: #5
RE: Prosty keyer - problem
Problem był hardware'owy ( celna uwaga SP6LUN - TNX). Na innym procesorze działa. I wgrany już i działa z docelowym ATTiny45.
Pozdrawiam.

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


Skocz do:


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