Skocz do zawarto┼Ťci

Sprawdzenie schematu TCRT5000


Jagodziana

Pomocna odpowied┼║

Czujnik 1 masa nie jest pod┼é─ůczona do emitera.

Zamiast rezystor├│w podci─ůgaj─ůcych wygodniej by┼éoby u┼╝y─ç drabinki, ale tak te┼╝ mo┼╝e by─ç.

Odpu┼Ť─ç sobie lepiej LM324M, i pod┼é─ůcz czujniki bezpo┼Ťrednio do ADC w mikrokontrolerze ­čśë

Link do komentarza
Share on other sites

Gdzie┼Ť czyta┼éem, ┼╝e lepiej zastosowa─ç LM324N ni┼╝ ADC w mikro kontrolerze. Po drugie to wszystko trzeba by by┼éo zaprogramowa─ç ­čśů a tak mamy pi─Ökne zera i jedynki. Dla informacji u┼╝ywam ATmega 8 i programuje w C.

P.S poprosił bym o linka gdzie było by wytłumaczone wszystko na temat PWM w C.

Link do komentarza
Share on other sites

Gdzie┼Ť czyta┼éem, ┼╝e lepiej zastosowa─ç LM324N ni┼╝ ADC w mikro kontrolerze.

To skończ korzystać z tego źródła informacji.

Link do komentarza
Share on other sites

Zarejestruj si─Ö lub zaloguj, aby ukry─ç t─Ö reklam─Ö.
Zarejestruj si─Ö lub zaloguj, aby ukry─ç t─Ö reklam─Ö.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i monta┼╝ PCB - wybierz sprawdzone PCBWay!
┬á┬á ÔÇó Darmowe p┼éytki dla student├│w i projekt├│w non-profit
┬á┬á ÔÇó Tylko 5$ za 10 prototyp├│w PCB w 24 godziny
┬á┬á ÔÇó Us┼éuga projektowania PCB na zlecenie
┬á┬á ÔÇó Monta┼╝ PCB od 30$ + bezp┼éatna dostawa i szablony
┬á┬á ÔÇó Darmowe narz─Ödzie do podgl─ůdu plik├│w Gerber
Zobacz r├│wnie┼╝ ┬╗ Film z fabryki PCBWay

P.S poprosił bym o linka gdzie było by wytłumaczone wszystko na temat PWM w C.

A może trochę własnej inicjatywy?

Było wielokrotnie omawiane, poczytaj pokaż co udało Ci się zrobić to dalej pomożemy.

Link do komentarza
Share on other sites

Treker przed napisaniem swojego postu przeczyta┼éem google i nie mog─Ö tego zrozumie─ç. Dlatego te┼╝ prezentuje jak zawsze list─Ö pyta┼ä ­čśů

1 Co to TCCR1A, TCCR1B, OCR1A i OCR1B?

2 za┼é├│┼╝my to (tego nie mog─Ö wcale poj─ů─ç):

 _BV(COM1A1)|_BV(COM1B1)|_BV(COM1A0)|_BV(COM1B0)|_BV(WGM10);

Co to jest te BV i to co┼Ť w nawiasach?

3 Jak wybra─ç kt├│rym wyj┼Ťciem chce sterowa─ç?

4 Jakie muszę "zdefiniować" funkcje preprocesora? (w każdym przykładzie jest inaczej)

5 Czy zastosowany kwarc jest wa┼╝ny? (chyba tak ale wol─Ö si─Ö upewni─ç)

Na razie to chyba wszystko.

Link do komentarza
Share on other sites

At.1 TCCR1A, TCCR1B, to rejestry które musisz wypełnić

OCR1A i OCR1B to oznaczenia wyj┼Ť─ç sygna┼éu pwm.

At.2 _BV(1) znaczy to samo co 1<<1 stosuje si─Ö to do ustawiania jednego bitu w inny stan.

At.3 odpowied┼║ w punkcie 1

At.4 Nie rozumie zbytnio chyba chodzi Ci o rejestry

To fajne źródło http://avr.elektroda.eu/?q=node/39

At.5 nie koniecznie trzeba stosowa─ç kwarc, ale jak ju┼╝ zastosowa┼ée┼Ť musisz to uwzgl─Ödni─ç w preskalu.

  • Pomog┼ée┼Ť! 1
Link do komentarza
Share on other sites

Odno┼Ťnie punktu czwartego to chodzi┼éo mi o te #define

A teraz do konkret├│w:

Je┼╝eli chce zrobi─ç PWM 8 bitowe na n├│┼╝ce PB1 to robi─Ö tak (wiem, ┼╝e robi─Ö ┼║le, mo┼╝ecie wrzuci─ç na demotywatory nie obra┼╝─Ö si─Ö ;])

// Tu jakie┼Ť #define o kt├│rych nie wiem i nie rozumiem
void main()
{
DDRB=0xFF;
sbi(DDRB,PB1);
TCCR1A=_BV(COM1A1)|_BV(COM1A0)|_BV(PWM10);

I co dalej? Jak ustawi─ç co ile ma by─ç nadawany sygna┼é? co zrobi┼éem ┼║le? Co to jest _BV (lubie wiedzie─ç co pisze a nie jakie┼Ť voodoo programming ­čśů )

Link do komentarza
Share on other sites

#include <avr/io.h>      //standartowe biblioteki
#include <util/delay.h> 
#include <avr/signal.h>


#define F_CPU 8000000L  //taktowanie procesora

#define PWM10 0         //zdefiniowane warto┼Ťci dla pwm
#define PWM11 1

//program nie rozumie co znaczy PWM10 i PWM11 dlatego przypisuje to r─Öcznie

void pwm_init() //funkcja inicjuj─ůca pwm
{ 

 TCCR1A = _BV(COM1A0)|_BV(COM1A1)|_BV(COM1B1)|_BV(COM1B0)|_BV(PWM10)|_BV(PWM11);  // czasomierz 1 w trybie 10 bitowego PWM
 TCCR1B = _BV(CS11|CS10); 
}

void pwm_ctrl_a(uint16_t pwm) //funkcja wpisuj─ůca warto┼Ť─ç pwm na OCR1A
{

 if(pwm > 1023)  // zabespieczenie przed daniem za du┼╝ego pwm
{
pwm = 1023;
}

 OCR1A=pwm;                // wpisz pwm do OCR1A

}


void pwm_ctrl_b(uint16_t pwm) //funkcja wpisuj─ůca warto┼Ť─ç pwm na OCR1B
{


 if(pwm > 1023)  // zabespieczenie przed daniem za du┼╝ego pwm
{
pwm = 1023;
}

 OCR1B=(pwm);                // wpisz pwm do OCR1B

}

Oto napisane przeze mnie funkcje do regulacji pr─Ödko┼Ťci w moim robocie.

Stosuje si─Ö je tak ┼╝e najpierw (i tylko raz) wykonujesz funkcje "pwm_init()" kt├│ra zapisuje rejestry i ustawia wszystkie potrzebne rzeczy. Dwie pozosta┼ée funkcje s┼éu┼╝─ů do wpisywania warto┼Ťci pwm na odpowiednim porcie dla atmegi8 OCR1A to PB1 a OCR1B to PB2. Mam nadzieje ┼╝e to Ci pomo┼╝e.

P.S. Nie zapomnij zdeklarowa─ç port├│w jako wyj┼Ťcia.

  • Lubi─Ö! 1
Link do komentarza
Share on other sites

Wielkie dzi─Öki ÔŁŚ Nale┼╝y Ci si─Ö browar.

[ Dodano: 26 Lut 10 03:36 ]

#include <avr/io.h>
#include <stdlib.h>

#include "delay.h"	// plik zawieraj─ůcy funkcje ipozniaj─ůce


#define F_CPU 8000000L  //taktowanie procesora

#define PWM10 0         //zdefiniowane warto┼Ťci dla pwm
#define PWM11 1 



void PWM_init()
{

 TCCR1A = _BV(COM1A0)|_BV(COM1A1)|_BV(COM1B1)|_BV(COM1B0)|_BV(PWM10)|_BV(PWM11);  // czasomierz 1 w trybie 10 bitowego PWM
 TCCR1B = _BV(CS11|CS10);
}

void ustawieniePWM(uint16_t pwma,uint16_t pwmb) //funkcja wpisuj─ůca warto┼Ť─ç pwm na OCR1A
{

 if(pwma > 1023)  // zabespieczenie przed daniem za du┼╝ego pwm
   {
   pwma = 1023;
   }

 OCR1A=pwma;    
  if(pwmb > 1023)  // zabespieczenie przed daniem za du┼╝ego pwm
   {
   pwmb = 1023;
   }

 OCR1B=pwmb;   
} 

int main()
{


delayms(100);    
DDRB=0xFF;
DDRC=0xFF;       
delayms(100);   


while(1) 
{
	PWM_init();
	ustawieniePWM(1000,1000);
	PORTB=0x00101011;
	delayms(100);
	ustawieniePWM(1000,300);
	PORTB=0x00101011;
	delayms(100);
}

Co robi─Ö ┼║le ? Pod port b pod┼é─ůczy┼éem mostek, ostatni bit to pierwszy bit w mostku itd. Robot pracuje tak : lekko skr─Öca (tylko jedna strona pracuje) i przerwa, i tak w k├│┼éko.

Link do komentarza
Share on other sites

┼╣le ustawiasz warto┼Ť─ç portu b.

PORTB=0x00101011

0x00101011 to zapis hexagonalny r├│wnoznaczny z binarnym 100000001000000010001

je┼╝eli chcesz napisa─ç liczb─Ö binarne nale┼╝y wpisa─ç j─ů w ten spos├│b 0b00101011 dwa zera na pocz─ůtku liczby nie s─ů potrzebne dlatego piszemy 0b101011.

Natomiast hexagonalnie wygl─ůda┼éo by to tak 0x2b.

I tak jak napisał kolega swierkdeck, PWM_init() używamy tylko raz;

  • Pomog┼ée┼Ť! 1
Link do komentarza
Share on other sites

Ja si─Ö ucz─Ö og├│lnie C++ i to na kompy a nie na AVR'y. Wed┼éug tego j─Özyka jak napisz─Ö jak─ů┼Ť funkcj─Ö (tak to si─Ö nazywa w C++ , nie wiem jak w C) to aby j─ů wykona─ç w mainie musz─Ö j─ů tam wykona─ç. Rozumiem, ┼╝e w C jest inaczej ­čśů . O to x zamiast b to moja g┼éupota ;].

Link do komentarza
Share on other sites

Jest dok┼éadnie tak jak piszesz, lecz ty wrzucasz j─ů nie tylko do int main ale i do p─Ötli niesk─ůczono┼Ťci while(1), a zale┼╝y nam aby funkcja PWM_init() by┼éa wykonywana tylko raz czyli wrzucasz j─ů przed while(1)

Dam ci jeszcze rade je┼╝eli programujesz w C++ to u┼╝ywaj zamiast while(1) p─Ötli for(;­čśë ┼éatwiej si─Ö przyzwyczai─ç.

Link do komentarza
Share on other sites

Do┼é─ůcz do dyskusji, napisz odpowied┼║!

Je┼Ťli masz ju┼╝ konto to zaloguj si─Ö teraz, aby opublikowa─ç wiadomo┼Ť─ç jako Ty. Mo┼╝esz te┼╝ napisa─ç teraz i zarejestrowa─ç si─Ö p├│┼║niej.
Uwaga: wgrywanie zdj─Ö─ç i za┼é─ůcznik├│w dost─Öpne jest po zalogowaniu!

Anonim
Do┼é─ůcz do dyskusji! Kliknij i zacznij pisa─ç...

×   Wklejony jako tekst z formatowaniem.   Przywr├│─ç formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Tw├│j link b─Ödzie automatycznie osadzony.   Wy┼Ťwietla─ç jako link

×   Twoja poprzednia zawarto┼Ť─ç zosta┼éa przywr├│cona.   Wyczy┼Ť─ç edytor

×   Nie mo┼╝esz wklei─ç zdj─Ö─ç bezpo┼Ťrednio. Prze┼Ťlij lub wstaw obrazy z adresu URL.

×
×
  • Utw├│rz nowe...

Wa┼╝ne informacje

Ta strona u┼╝ywa ciasteczek (cookies), dzi─Öki kt├│rym mo┼╝e dzia┼éa─ç lepiej. Wi─Öcej na ten temat znajdziesz w Polityce Prywatno┼Ťci.