Anonymní profil AB – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil AB – Programujte.comAnonymní profil AB – Programujte.com

 

Příspěvky odeslané z IP adresy 217.115.249.–

Anonymní uživatel
Mikrokontroléry › AVR delay
31. 8. 2009   #115269

často je problém s tím, že nemáš povolený optimalizace. Bez nic h to nechodí. Doporučuju O0.


Abys nemál začátečníky.
Knihovna util/delay.h chodí právě se všemi optimalizacemi kromě O0.

AB
Mikrokontroléry › Práce s časem v C pro Atmega8
5. 6. 2009   #110181

Obsluhu v přerušení řeším tak, že:
1. zakážu ostatní přerušení
2. zapamatuji registry (to zatím nedělám, ale asi by se mělo:-) )
3. udělám obsaluhu daného časovače
4. obnovím registry
5. povolím ostatní přerušení



V céčku stačí bod 3. Body 1. a 5. dělá procesor automaticky (zakáže všechna přerušení, ne jen ostatní) a body 2., 4. udělá překladač.

co se stane, když obsluhuji jeden časovač, jsem tedy v bodě (3) a najednou dojde k přetečení časovače druhého?



Pokud během obsluhy přerušení vznikne další jedno nebo více přerušení, budou postupně obsloužena po skončení právě probíhajícího. Žádné přerušení se neztratí, procesor si všechny pamatuje (pomocí příznaků přerušení). Pokud čeká na obsluhu více přerušení, přijde první na řadu to s nejvyšší adresou.

AB
Mikrokontroléry › komunikace pres UART ATmega8
1. 6. 2009   #102070

void uart_puts (char *s) 

{
while (*s)
uart_putc(*(s++));
}

AB
Mikrokontroléry › komunikace pres UART ATmega8
1. 6. 2009   #102041

Funkce getchar() a putchar() nejdou použít bez předchozího přesměrování.
Jednodušší je tady použít vlastní funkce pro UART.

#include <avr/io.h>


// get char
unsigned char uart_getc( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}


// send char

void uart_putc(unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) )
;
UDR = data;
}


int main(void)
{
char znak;

/***** inicializace uart *****/
UCSRA = 0x00;
UBRRH = 0x00; // nastaveni rychlosti pro krystal 8MHz
UBRRL = 0x33;
UCSRB = 0x18; // povolit vysilani a prijem
UCSRC = 0x86; // ramec dat: 8 datovych, 1 stop bit, bez parity

while(1)
{
znak=uart_getc();
uart_putc(znak);
}
}

Anonymní uživatel
Mikrokontroléry › ATMEL AT89C2051
4. 1. 2009   #93393


Něco v Keil je špatně nastaveno.
V "Options for Target" - Target zatrhněte volbu Use On-chip ROM.
Tamtéž okénka Off-chip memory musí být prázdná.
Zkoušel jsem s Keil2, nevím jestli to u vás bude stejné.

Anonymní uživatel
Mikrokontroléry › zapojení potenciometru k ATm…
15. 12. 2008   #91949

Ještě doplním, že pin AVCC musí být vždy propojen s VCC, i když nepoužijeme AD konverzi.
VCC musí být perfektně filtrované.
I k AREF můžeme zkusit přidat elektrolyt, kdyby hodnoty nebyly stabilní.

Anonymní uživatel
Mikrokontroléry › zapojení potenciometru k ATm…
15. 12. 2008   #91948


Příklad vše vysvětlí.

$regfile = "m8def.dat"

$crystal = 10000000
$hwstack = 32
$swstack = 8
$framesize = 16

'Použijeme vnitřní referenční napětí Uref.
'Má být 2,56 V. Přesnou hodnotu změříme na pinu AREF.
'Na pinu AREF je filtrační kond 100k proti zemi.

Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc

Defword U
Dim U As Long
Uref = 2560 '[mV]

Do

U0 = Getadc(0) 'pin ADC0 (PortC.0)
U1 = Getadc(1) 'pin ADC1
U2 = Getadc(2) 'pin ADC2
'atd
U = U0 * Uref
U = U / 1024 'napětí na ADC0 v milivoltech

Loop

End

Anonymní uživatel
Mikrokontroléry › Zákmit tlačítka : v céčku OK…
9. 12. 2008   #91445


Na pinu s tlačítkem musí být pull-up:

Config Portc = Output

Config Portd = Input
Portd.6=1
Tlacitko Alias Pind.6

aa
Mikrokontroléry › Pouze svit diody v ATmega8
30. 11. 2008   #90829

 DDRB == _BV(PB0); // DDR = "Data Direction Register"


PORTB == ~(_BV(PB0));

Zásadní chyba je, že používáte operátor porovnání (==) místo přiřazení (=).

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý