Skocz do zawartości

Arduino i timery - problem ze zrozumieniem preskalerów


Pomocna odpowiedź

Najbardziej mnie zadziwia że nie działa przy presc = 1; No ja odpaliłem i tyka ładnie. Hmm czyżby w arduino było coś nie tak? Albo inny mikrokontroler? Jeśli są jakieś zmiany w projekcie to ja za bardzo nie pomogę niestety

  • Pomogłeś! 1
(edytowany)
8 minut temu, _LM_ napisał:

Najbardziej mnie zadziwia że nie działa przy presc = 1; No ja odpaliłem i tyka ładnie. 

Yyyy..😡 ale na arduino? Czy czysta atmega?

8 minut temu, _LM_ napisał:

Hmm czyżby w arduino było coś nie tak? Albo inny mikrokontroler? Jeśli są jakieś zmiany w projekcie to ja za bardzo nie pomogę niestety

No ja uzywam Uno i pro mini(oryginalne booty bez przerobek)...(klony co prawda) ale to znaczenia przeciez nie ma...procek to i tak ten sam..atmega328...i rozumiem ze sprawdzales ten moj kod tak?

Edytowano przez farmaceuta
1 minutę temu, farmaceuta napisał:

Yyyy..😡 ale na arduino? Czy czysta atmega?

Wgrywam bezpośrednio do mikrokontrolera i tak, jest to kopia twojego kodu, zmieniłem tylko sterowanie pinami. No i zwiększyłem wartości graniczne zmiennej x bo jak za szybko led mruga to mnie nerwuje hahaha

53 minuty temu, _LM_ napisał:

znów to powiem: być może Arduino zrobi to za programistę

Nie robi.

Chłopaki, przyjmijcie wreszcie do wiadomości, że nie istnieje żaden magiczny język Arduino, to najzwyczajniejszy w świecie C++ z jakimś tam dodatkowym prostym preprocesorem.

 

/*
 * main.c

 */

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

volatile uint32_t x;

int main(void) {

	DDRC |= (1 << PC2);

	//  TCCR2B |= (1<<CS22) | (1<<CS21) | (1<<CS20);  //preskaler na 1024
	//  TCCR2B |=  (1<<CS22) | (1<<CS21);  //preskaler na 256
	//  TCCR2B |=  (1<<CS22) | (1<<CS20);  //preskaler na 256
    //	TCCR2B |=  (1<<CS20) | (1<<CS21);  //preskaler na 256
	//  TCCR2B |= (1<<CS22);  //preskaler na 64
	TCCR2B |= (1 << CS21);  //preskaler na 8
	//  TCCR2B |=  (1<<CS20);  //preskaler na 1
	TIMSK2 |= (1 << TOIE2);    //wlaczenie przerwania od przepelnienia

	sei();

	for (;;) {

		//	ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
		//	{
		if (x == 6100) {
			//digitalWrite(13, HIGH);
			PORTC |= (1 << PC2);
		}
		if (x == 12200) {
			//digitalWrite(13, LOW);
			PORTC &= ~(1 << PC2);
			x = 0;
		}
		//	}
	}
}

ISR (TIMER2_OVF_vect) {
	x++;
}

Sprawdziłem na wszystkich prescalerach

  • Pomogłeś! 1
1 minutę temu, ethanak napisał:

Chłopaki, przyjmijcie wreszcie do wiadomości, że nie istnieje żaden magiczny język Arduino, to najzwyczajniejszy w świecie C++ z jakimś tam dodatkowym prostym preprocesorem.

kolego @ethanak  Jesli cos Ci do glowy przychodzi co nam umyka to chetnie poslucham...no mecze sie z tym i nie wiem co tu jeszcze nie tak jest...na arduino uzywaja rowniez tych timerow do generowania ppm np. I jakos to chodzi...wiec tak przypuszczam ze bootloader nic tu nie wadzi...

(edytowany)
5 minut temu, ethanak napisał:

Chłopaki, przyjmijcie wreszcie do wiadomości, że nie istnieje żaden magiczny język Arduino

Ja to wiem, ale nie znam wszystkich niuansów arduino bo zwyczajnie nie używam go, jedynie czasem jakiejś biblioteki głównie na potrzeby esp. Dlatego dobrze jak jest ktoś kto się na tym lepiej zna, ja wiem że avrgcc muszę o wszystko zadbać. Także @ethanak jeśli widzisz tu jakiś błąd to doradź bo ja już nie wiem co napisać farmaceucie. Mam na biurku uruchomiony ten program (napisany w C) i led mruga. 

Edytowano przez _LM_
Przed chwilą, _LM_ napisał:

wiem że avrgcc muszę o wszystko zadbać.

W Arduino też - przecież to nic innego jak avrgcc (albo inna wersja gcc, zależna od płytki) w ładnej otoczce, z edytorem (no, umówmy się że będziemy ten twór tak nazywać) i takim magicznym wichajstrem, co sam wie jakie biblioteki ma dokompilować. Nikt nie wymyślał nowego "języka Arduino". A całe te delaje, setupy. lupy i digitalrajty to też nie Arduino tylko normalna biblioteka (Wiring), tyle że standardowo podpinana do programu. Nie ma przymusu korzystania z niej, możesz to sobie robić po swojemu łącznie z wrzuceniem swojego maina i pisaniem w C zamiast C++.

 

  • Lubię! 1

Dodam jeszcze ze na timer0 ten kod sie nie wgra nawet...a ludzie tez z niego korzystaja z tym ze trzeba pamietac ze wszelkiej masci delay() na nim chodza i to bedzie zaburzone...

11 minut temu, _LM_ napisał:

Także @ethanak jeśli widzisz tu jakiś błąd to doradź

Nie doradzę bo też nie widzę, śledzę sobie wątek ale nie chciałem się wcinać (do momentu aż ktoś posądził Arduino o zdolności magiczne) 🙂

 

1 minutę temu, ethanak napisał:

Nikt nie wymyślał nowego "języka Arduino". A całe te delaje, setupy. lupy i digitalrajty to też nie Arduino tylko normalna biblioteka (Wiring), tyle że standardowo podpinana do programu. Nie ma przymusu korzystania z niej, możesz to sobie robić po swojemu łącznie z wrzuceniem swojego maina i pisaniem w C zamiast C++.

Ja sobie doskonale z tego zdaje sprawe...ale sila rzeczy kod powyzej jest prawidlowy i powinien dzialac...ale nie dziala poprawnie lub nie dziala wcale...no nic, zostaja te smieszne fusy..jak sie zainstaluje AS to sie zobaczy

3 minuty temu, ethanak napisał:

Nie doradzę bo też nie widzę, śledzę sobie wątek ale nie chciałem się wcinać (do momentu aż ktoś posądził Arduino o zdolności magiczne) 🙂

Nie no my tu wszyscy wiemy ze arduino to tylko marka a nie osobny jezyk...no nic walcze dalej😉

Ostatnie co mi przychodzi do głowy że ten kod kompiluje się na inny mikrokontroler niż masz na płycie. Wtedy byłoby możliwe że nie wszystkie rejestry są prawidłowo ustawione, ze względu na to iż mogą mieć nieco inne adresy. Da się jakoś w tym całym Arduinowym bajzlu zmienić domyślny mikrokontroler? Jest jakiś plik makefile czy coś?

3 minuty temu, _LM_ napisał:

Ostatnie co mi przychodzi do głowy że ten kod kompiluje się na inny mikrokontroler niż masz na płycie. Wtedy byłoby możliwe że nie wszystkie rejestry są prawidłowo ustawione, ze względu na to iż mogą mieć nieco inne adresy. Da się jakoś w tym całym Arduinowym bajzlu zmienić domyślny mikrokontroler? Jest jakiś plik makefile czy coś?

Napewno nie to bo gdybym wgrywal na Uno np. a inny procek bylby ustawiony "gdzies tam" to predzej czy pozniej cos innego by mi nie dzialalo...a ja juz na Uno,nano,pro mini setki kodow przerobilem i nigdy zadnych cyrkow...a jesli bym zmienial (narazie nie!) te fusy przez Usbasp to rozumiem ze boot mi zostanie w atmedze tak?? (bo innego sensu by to nie mialo w sumie)

13 minut temu, farmaceuta napisał:

zostaja te smieszne fusy..

Jakbyś nie miał ustawionych tych fusebitów to timer musi działać co najwyżej wolniej co już wiesz.

 

18 minut temu, farmaceuta napisał:

a ludzie tez z niego korzystaja z tym ze trzeba pamietac ze wszelkiej masci delay() na nim chodza i to bedzie zaburzone...

Jak ogarniemy timery to pokażę Ci jak można pozbyć się delayów, i jak podzielić program na zadania wykonywane w casie

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...