• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie Attiny85 z Serial.
#1
Witam,

Chcę zrobić podajnik karmy na attiny85. Dwa razy dziennie ma podawać karmę przy użyciu serwa.
Problem polega na tym że: wysłane informacje po serialu są nieczytelne, poza tym powinny być wysyłane co sekundę a są wysyłane w większy dostępie czasowym(np. 3-4 s).

Oto kod:
Kod:
#include <Time.h>
#include <TimeLib.h>

#include <SoftwareSerial.h>



SoftwareSerial mySerial(3,4);

int servopin = 2;

void servopulse(int servopin,int myangle)
{
  for(int i=0;i<=15;i++) 
  {
  int pulsewidth=(myangle*11)+500;
  digitalWrite(servopin,HIGH);
  delayMicroseconds(pulsewidth);
  digitalWrite(servopin,LOW);
  delay(20-(pulsewidth*0.001));
  }
}

void setup() {
  
  mySerial.begin(9600);
  servopulse(servopin,0);
  servopulse(servopin,0);
  setTime(11,29,50,1,1,2017);
  pinMode(servopin,OUTPUT);
}
    
void loop() {
  
  digitalClockDisplay();
  delay(1000);
 
  if(second()==00 && minute()==30 && hour()==11)
  {
    karm();
    delay(990);
  }
  if(second()==0 && minute()==00 && hour()==16)
  {
    karm();
    delay(990);
  }
  
 
}

void digitalClockDisplay()
{
  mySerial.print(hour());
  mySerial.print(":");
  mySerial.print(minute());
  mySerial.print(":");
  mySerial.print(second());
  mySerial.print(" ");
  mySerial.print(day());
  mySerial.print(".");
  mySerial.print(month());
  mySerial.print(".");
  mySerial.println(year());  
}

void karm()
{
  servopulse(servopin,0);
  servopulse(servopin,60);
  delay(10);
  servopulse(servopin,0);
  mySerial.println("Karmie");
}

Proszę o pomoc!
 
Odpowiedź
#2
Wgrałeś bootloader, ustawiłeś zegar na wewnętrzny bez dzielnika div 8?Jak odczytujesz fuse bity - podaj wartości.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
(20-08-2018, 19:00)kaczakat napisał(a): Wgrałeś bootloader, ustawiłeś zegar na wewnętrzny bez dzielnika div 8?Jak odczytujesz fuse bity - podaj wartości.

Bootloader-a nie używam programuje przez ICSP. Używam zegara wewnętrznego 16MHz.
 
Odpowiedź
#4
Wgranie bootloadera ustawiłoby fusebity (w tym prędkość zegara) tak jak masz ustawione w opcjach projektu, np. na 16MHz. Jeśli rzeczy dzieją się 4x wolniej, a UART wysyła krzaki to znaczy, że zegar jest inny niż Ci się wydaje.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
(20-08-2018, 21:24)kaczakat napisał(a): Wgranie bootloadera ustawiłoby fusebity (w tym prędkość zegara) tak jak masz ustawione w opcjach projektu, np. na 16MHz. Jeśli rzeczy dzieją się 4x wolniej, a UART wysyła krzaki to znaczy, że zegar jest inny niż Ci się wydaje.

Dzięki po wgraniu bootloadera wszystko działa jak należy. Rolleyes
 
Odpowiedź
#6
(20-08-2018, 21:06)jaanonim napisał(a):
(20-08-2018, 19:00)kaczakat napisał(a): Wgrałeś bootloader, ustawiłeś zegar na wewnętrzny bez dzielnika div 8?Jak odczytujesz fuse bity - podaj wartości.

Bootloader-a nie używam programuje przez ICSP. Używam zegara wewnętrznego 16MHz.

Pokaż kod programu jak ustawiasz te 16MHz.
 
Odpowiedź
#7
Alesz proszę pana, pszeciesz 16MHz się ustawia fusami, nie w kodzie!
 
Odpowiedź
#8
(21-08-2018, 23:16)Irvin napisał(a): Alesz proszę pana, pszeciesz  16MHz się ustawia fusami, nie w kodzie!

Ależ proszę pana opcje oscylatora można ustawiać zarówno kodem jak i bitami konfiguracyjnymi, to po pierwsze "primo".
Po drugie "primo" wewnętrzny oscylator Tiny85 to 8MHz. Tiny ma jednak PLL i można ustawić taktowanie CPU 16MHz a timera nawet 64MHz. Aby to zrobić należy:
- ustawić bit konfiguracyjny programatorem lub z programu
- skonfigurować PLL.

Tak, więc proszę pana, trzeba się dokształcić bo inaczej palnie się gafę na forum próbując wykazać swoją mądrość.
 
Odpowiedź
#9
Gafę zrobić może tylko ekspert, np. taki, który pomaga w rozwiązanym problemie.
 
Odpowiedź
#10
(22-08-2018, 12:57)Irvin napisał(a): Gafę zrobić może  tylko ekspert,  np. taki, który pomaga w rozwiązanym problemie.

Pytanie o szczegóły programu to nie gafa.

Przeczyta początkujący złe porady i pomyśli, że magicznie, uC Tiny85 zacznie pracować na wewnętrzym generatorze RC 16MHz, generatorze, którego Tiny85 nie posiada.
Posiada 8MHz, innego tam nie ma. Można taktowac CPU zegarem 16MHz ale generator nadal ma 8MHz.
NIE DA SIĘ więc taktować Tiny85 wewnętrznym generatorem 16MHz, TO JEST FAKT, a z faktami się nie dyskutuje.
Dyskutuje się natomiast, bezproduktywnie, jak się ma małą wiedze a chce się pokazać, że owa wiedza jest ogromna. Wtedy pisze się posty, które nic nie wnoszą do tematu. Pisze się aby pisać, aby się wykazać, w praktyce swoją niewiedzą. W ten sposób wiele osób ośmiesza się na forach, a fora czytają także pracodawcy, nauczycie, znajomni, współpracownicy, koledzy z piaskownicy, itd.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości