 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
juref Član


Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.20 Kraj: Črnomelj
|
Objavljeno: Pet Mar 30, 2012 9:12 am Naslov sporočila: USART primer |
|
|
Pozdravljeni!
Odločil sem se malo poigrati z USART-om ampak je malo bolj zahtevno kot sem si mislil . Prosil vas bi, če bi lahko kdo podal primer ter knjižnico USART-a
Najlepša hvala ter lep dan! |
|
Nazaj na vrh |
|
 |
xfce Član

Pridružen-a: Čet 28 Jul 2011 8:06 Prispevkov: 521 Aktiv.: 3.08
|
Objavljeno: Pet Mar 30, 2012 9:22 am Naslov sporočila: |
|
|
Joj, joj.. to je kot bi rekel, rad bi podrl mašino od avta. Daj mi ključ.
Stvar je lahko rešena hardversko ali softversko.
Vsaj povej kateri mikrokrmilnik imaš, ali pač kje bi to rad imel. |
|
Nazaj na vrh |
|
 |
S53DZ Član



Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 5.52 Kraj: Ljubljana
|
Objavljeno: Pet Mar 30, 2012 9:42 am Naslov sporočila: |
|
|
Meni je najbolj pomagalo, ko sem iz UART-a prešel na COM (RS-232) in uredil komunikacijo s terminalskim programom na PC-ju/notesniku. Tako sem najlažje uredil komunikacijo v obeh smereh.
Sicer je pa treba pri UART-u:
- nastaviti hitrost,
- kontrolirati zastavico rx in tx buffer-ja in
- brati ali pisati v data register.
Pri sinhronem imam pa dobre izkušnje samo s SPI. |
|
Nazaj na vrh |
|
 |
juref Član


Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.20 Kraj: Črnomelj
|
Objavljeno: Pet Mar 30, 2012 12:07 pm Naslov sporočila: |
|
|
uporabil bi ATMEGA324 z čipom max232. Za začetek bi probal izpisati besedo na terminal, potem ko mi bi bilo pa kaj bolj jasno pa visual basic... |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.36 Kraj: Lovrenc na P.
|
Objavljeno: Pet Mar 30, 2012 12:28 pm Naslov sporočila: |
|
|
Iz datasheeta tvojega krmilnika poiščeš registre za uart in nastaviš vrednosti kot piše. Verjetno se nastavi največ pet registrov in mora delati. |
|
Nazaj na vrh |
|
 |
siljo Član



Pridružen-a: Tor 28 Okt 2003 8:08 Prispevkov: 1035 Aktiv.: 4.37 Kraj: Ribn'ca
|
Objavljeno: Pet Mar 30, 2012 1:03 pm Naslov sporočila: |
|
|
C?
BASCOM?
FastAVR?
assembler?
.... _________________ Lep pozdrav! |
|
Nazaj na vrh |
|
 |
juref Član


Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.20 Kraj: Črnomelj
|
Objavljeno: Pet Mar 30, 2012 1:11 pm Naslov sporočila: |
|
|
siljo je napisal/a: |
C?
BASCOM?
FastAVR?
assembler?
.... |
se opravičujem v C jeziku |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Pet Mar 30, 2012 4:31 pm Naslov sporočila: |
|
|
Deluje z atmega8, moralo bi tudi z atmega32...
Pomeči ven, česar ne rabiš, ta program običajno poženem, če kaj preizkušam in je not nametanih že preveč smeti, samo dela pa.
LP G
Koda: |
#ifndef F_CPU
#define F_CPU 11059200UL
#endif
#include <avr/io.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <util/delay.h>
int delay;
int delay1;
//This function is used to initialize the USART
//at a given UBRR value
void USARTInit(uint16_t ubrr_value)
{
//Set Baud rate
UBRRL = ubrr_value;
UBRRH = (ubrr_value>>8);
/*Set Frame Format
>> Asynchronous mode
>> No Parity
>> 1 StopBit
>> char size 8
*/
UCSRC=(1<<URSEL)|(3<<UCSZ0);
//Enable The receiver and transmitter
UCSRB=(1<<RXEN)|(1<<TXEN);
}
//******************************************************************************************
int uart_putch(char ch, FILE *stream)
{
if (ch == '\n')
uart_putch('\r', stream);
while (!(UCSRA & (1<<UDRE)));
UDR=ch;
return 0;
}
int uart_getch(FILE *stream)
{
unsigned char ch;
while (!(UCSRA & (1<<RXC)));
ch=UDR;
/* Echo the output back to the terminal */
uart_putch(ch,stream);
return ch;
}
//*******************************************************************************************
/* Assign I/O stream to UART */
FILE uart_str = FDEV_SETUP_STREAM(uart_putch, uart_getch, _FDEV_SETUP_RW);
//*******************************************************************************************
void CLK_0()
{
PORTD = 0b00100000;
for (delay=0; delay < 10;delay++){}
}
void CLK_1()
{
PORTD = 0b01000000;
for (delay=0; delay < 5;delay++){}
}
int beri_enkoder(){
uint8_t i;
uint8_t encoder=0;
uint8_t j;
encoder = 0;
for(i=0;i<9;i++){
CLK_1();
if(PIND & (1<<PD4)){
j = 1; }
else {
j = 0; }
CLK_0();
encoder = (encoder + j);
if(i<8){
encoder = (encoder << 1);
}
}
return(encoder);
}
void ADC_init(int channel)
{
ADMUX = channel;
//prescaler na 1MHz/8=125khz
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
channel = ADC_Read();
}
int ADC_Read(void)
{
char i;
int ADC_temp;
int ADCr =0;
//sbi(ADCSRA, ADEN);
ADCSRA |=(1<<ADSC);
while(!(ADCSRA & 0x10));
for (i=0;i<8;i++)
{
ADCSRA |=(1<<ADSC);
while(!(ADCSRA & 0x10));
ADC_temp = ADCL;
ADC_temp += (ADCH <<8);
ADCr +=ADC_temp;
}
ADCr = ADCr >> 3;
//cbi(ADCSRA,ADEN);
return ADCr;
}
double Beri_tlak(void)
{
double ADC_vrednost;
double Vout;
double tlak;
ADC_vrednost = ADC_Read();
Vout = (5*ADC_vrednost) / 1024;
tlak = ((0.76+Vout) / 0.05295);
tlak = (tlak*10)+31;
return (tlak);
}
int main() {
// double tlak;
int encoder;
int *ukaz;
stdout = stdin = &uart_str; // to poveže uart z STDIO.H !!!!!
DDRD=0b01101100; //PORTD2 in PORTD3 sta izhoda, ostalo so vhodi
USARTInit(5); //UBRR = 5 =11059200mhz & 115200 baud
// fdevopen(out,0,0); //important if using stdio.h functions
// CLK_0();
// for (delay=0; delay < 2000;delay++){} // nekaj maleag zakasnitve
// ADC_init(1);
while(1)
{
// tlak=Beri_tlak();
// printf("%f \n",tlak);
// printf("mBar\n");
scanf("%i",&ukaz);
// printf("Vrednost ukaz = %i\n\r", ukaz);
if (ukaz == 5)
{
printf("To je prva vrstica teksta \n\r");
printf("To je druga vrstica teksta \n\r");
printf("To je tretja vrstica teksta \n\r");
printf("To je cetrta vrstica teksta \n\r");
printf("To je peta vrstica teksta \n\r");
printf("To je sesta vrstica teksta \n\r");
printf("To je sedma vrstica teksta \n\r");
printf("To je osma vrstica teksta \n\r");
printf("To je deveta vrstica teksta \n\r");
}
// encoder = beri_enkoder();
// printf("%d \n",encoder);
// _delay_ms(10000);
}
}
|
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
tonko Član


Pridružen-a: Sob 25 Jun 2005 13:45 Prispevkov: 541 Aktiv.: 2.28 Kraj: Črnomelj
|
Objavljeno: Sob Mar 31, 2012 10:17 am Naslov sporočila: |
|
|
Kateri 'C' ?
Če delaš s CodevisionAVR imaš čarovnika, ki ti s par kliki zgenerira cel projekt. Ti moraš samo še v main funkcijo dodati izpis npr. printf("DOBER DAN\n"); , skompajlirati projekt ter ga vpisati v mikrokontroler.
Skratka vse skupaj imaš dela za minuto ali dve. |
|
Nazaj na vrh |
|
 |
juref Član


Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.20 Kraj: Črnomelj
|
Objavljeno: Tor Apr 03, 2012 12:04 pm Naslov sporočila: |
|
|
hvala lepa vsem!
Ja codevision se moram malo naučit hehe drugače pa hvala še enkrat! |
|
Nazaj na vrh |
|
 |
powr Član



Pridružen-a: Tor 18 Dec 2007 13:20 Prispevkov: 668 Aktiv.: 3.13 Kraj: Postojna
|
Objavljeno: Sre Apr 04, 2012 12:46 am Naslov sporočila: |
|
|
Ampak v free verziji nimas UART i2c in ostalih fines. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Sre Apr 04, 2012 7:10 am Naslov sporočila: |
|
|
Če bi se rad kaj naučil, potem tace stran od čarovnika. Poglej v datasheet, katere registre moraš nastavit. Spisati moraš tudi funkcije za pošiljanje in sprejem znaka.
Sicer pa imaš primere zraven GCC, poglej jih. _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 496 dni
Powered by phpBB © 2001, 2005 phpBB Group
|