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.–

Mikrokontroléry › AVR Toolchain 3.3.0 + AVR st…
25. 11. 2011   #150496

../test.c:575: warning: 'TIM1_OVF_vect' appears to be a misspelled signal handler
(chybně napsaná obsluha přerušení)

Mně se ještě nepodařilo takové vážné varování přehlédnout. Předpokládám že si tu nikdo nemyslí,

že stačí sledovat chyby a varování ne.

Kromě toho to není chyba toolchainu. CMPA/CMPB je i v datašítu, takže jsou to platné názvy.

I jména jiných přerušení se typ od typu liší, ale přepisovat to v definičním souboru (pokud to tak bylo myšleno)

je hodně drsné.

Mikrokontroléry › Nefungující SPI na ATM128A
30. 8. 2011   #146899

Pin SS má být nastavený jako výstup, i když se nepoužije.

Mikrokontroléry › Attiny 13
22. 7. 2011   #144871

#1 Rytir91
Problém je asi v tom že do ramky tiny13, která má 64 bajtů, se snažíš natlačit 100 bajtů stack a 100 bajtů frame.

Myslím že rozumné hodnoty jsou takové, aby obě tyto věci nezabraly více než cca 30% ram.

Zkus

StackSize      = $000A, iData;

FrameSize      = $000A, iData;

Zbude 44 bajtů pro globální proměnné.

Nevím, jestli to vyřeší celý problém, já v tomto jazyku neprogramuju.

AB
Mikrokontroléry › Nefunkcni pocitani vlozenych…
15. 6. 2011   #143216

Zkoušel jsem jak tvůj program zpracuje dva vstupní signály.
Jeden je schodovitý, druhý kolísá kolem pevné hodnoty.
Výsledek je v xls v příloze.

AB
Mikrokontroléry › Nefunkcni pocitani vlozenych…
14. 6. 2011   #143201

No tak na svitivosti led bys ty filtry stejne nepoznal


Nerozumím jaké filtry?

PWM1(read_ADC1()/4);
Tady se nic nefiltruje, jenom se výstup nastaví podle hodnoty ADC.

PWM1(avg(read_ADC1())/4);
Tady se děje totéž, jenom hodnota ADC se průměruje z 16-ti měření.
Průměrování funguje, zkoušel jsem v simulátoru.

Filtr se dává až na výstup pro vyhlazení průběhu PWM.

ty funkce (prestoze jsou dobre napsane) mi nehcteji pocitat


Které funkce konkrétně?

Chápu dobře, že napětí na výstupu PWM má být úměrné hodnotě ADC vstupu?
Pokud ano, tak můj test ukazuje že to tak funguje.


AB
Mikrokontroléry › Nefunkcni pocitani vlozenych…
12. 6. 2011   #143157

Vytisklo se to nějak jinak než jsem chtěl, ale nemám možnost to editovat.

AB
Mikrokontroléry › Nefunkcni pocitani vlozenych…
12. 6. 2011   #143156

Zkoušel jsem tvůj kód:

Připojil jsem potenciometr 10k mezi GND a VCC (+5V)
Střed jde na ADC0 . (vypni pull-up na adc vstupech)

K výstupu PWM1 (OC0, u tebe PB3) jsem připojil Led v serii s odporem proti zemi a voltmetr.

1. Kód

int main(void) 

{
init_port();
init_PWM1();
init_PWM2();

while(1){

PWM1(read_ADC1()/4);
}
} /code]
funguje podle očekávání.
Potenciometrem se dá nastavit jas diody od nuly do maxima.
Napětí výstupu se při tom mění od 0 do 5V.

Úplně stejně to funguje když místo
PWM1(read_ADC1()/4);
použiju
PWM1(avg(read_ADC1())/4);

Takže v čem je problém?

Ale vyvíjet program takhle naslepo není dobré.
Přidej k tomu nějaký převodník uart/rs232 aby sis na PC terminálu mohl zobrazovat hodnoty při běhu programu.

AB
Mikrokontroléry › Zapojení LCD 8bit
29. 5. 2011   #142650

Ne.

AB
Mikrokontroléry › Zapojení LCD 8bit
29. 5. 2011   #142645


V Bascomu by to mělo být

Config Lcd = 16 * 2

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.7

D0-Portb.0
D1-Portb.1
...
D7-Portb.7

AB
Mikrokontroléry › HELP PLS!! kontrola zdrojaku…
18. 5. 2011   #142228

Aha! už to vidím.
Má být

while (ADCSRA & (1 << ADSC))  {}; 

AB
Mikrokontroléry › HELP PLS!! kontrola zdrojaku…
18. 5. 2011   #142227

Jak to, že nečeká?

      ADCSRA |= (1<<ADSC); //Start conversion

while ((ADCSRA & (1 << ADSC)) == 1){};
servo = 173+ADCW*172/1024; //cteni z prevodniku a uprava hodnoty 1024 na rozsah 173-345 pro PWM2

AB
Mikrokontroléry › HELP PLS!! kontrola zdrojaku…
18. 5. 2011   #142215

 servo = 173+ADCW*172/1024; 

Tento kód nefunguje správně.
Hodnoty jsou typu int ale mezivýsledek po násobení může být větší než int a je ořezaný.
Takové výrazy je dobré otestovat v simulátoru.
Tady pomůže třeba
 servo = 173+ADCW*172UL/1024; 

AB
Mikrokontroléry › ADC prevodnik/vystup !Prosim…
2. 5. 2011   #141459

A jaký hlubší smysl má přečíst analogovou hodnotu, převést na digitální
a pak tutéž hodnotu převést zpátky na původní analogovou?

AB
Mikrokontroléry › Velikost referencovaného pole
27. 4. 2011   #141320

Buď bych musel mít podle uživatele AB stejný počet globálních proměnných pro jejich délky a nebo je mít uloženy v PROGMEM a když změním text tak měnit i uloženou délku a to je spousta místa pro chyby.



Asi jsi špatně porozumněl.

První příklad ukazuje, že funkce sizeof() zjistí délku i u pole umístěného ve FLASH.

Ve druhém příkladu pošleme funkci délku pole jako argument.
Ale neposíláme žádnou připravenou hodnotu. Žádné proměnné pro délku nezavádíme.
Délku pole zjistí právě funkce sizeof(), podívej se na volání funkce v main().

Prostě voláš
sendMsg(str1, sizeof(str1));
sendMsg(str2, sizeof(str2));
sendMsg(pole1, sizeof(pole1));

Výhoda je, že to funguje nejen pro stringy ale pro každé pole.

AB
Mikrokontroléry › Velikost referencovaného pole
26. 4. 2011   #141261

Ve funkci pošleme délku pole jako argument



const char str1[] PROGMEM = "ABCDEFG";

static void sendMsg(const char* data, uint8_t size)
{
for(uint8_t i=0;i<size;i++)
usartTx(pgm_read_byte(&data[i]));
}

int main()
{
sendMsg(str1, sizeof(str1));

AB
Mikrokontroléry › Velikost referencovaného pole
25. 4. 2011   #141256

Proč ne jednoduše

unsigned char str1[] PROGMEM = "ABCDEFG";

uint8_t size;

int main()
{

size=sizeof(str1);

AB
Mikrokontroléry › ATMEGA8 + řízení LCD MC1602E…
14. 1. 2011   #137786

To je zajímavý dotaz, když uvážíme že celé toto vlákno včetně ukázky kódu je v asembleru.

AB
Mikrokontroléry › Pragma - prosím o pomoc
13. 1. 2011   #137778

Takže program je psaný pro CodeVision.
Takový program nemůžeš bez úprav překládat jiným překladačem.

Jak je vidět, chyba je v tom, že programátor nezapíše správně do čipu.
Jaký používáš programátor - hardware, software?
Jaké hlášky konkrétně píše?
Podařilo se ti s ním zapsat jiný program?

AB
Mikrokontroléry › Pragma - prosím o pomoc
12. 1. 2011   #137731

Jaký asembler používáš?
Proč je do asm souboru inkludovaný céčkový "mega162.h" ?

AB
Mikrokontroléry › ATMEGA32U2/U4 USB problém
13. 12. 2010   #136841

1. Klasickým ISP programátorem bych přečetl flash.
2. Zkontroloval bych, jestli je zapsaný bootloader. (měl by začínat na bajtové adrese 0x7000, nižší adresy by měly být prázdné).
3. Přečetl bych fuses a porovnal s default hodnotami v datašítu.

AB
Mikrokontroléry › Zákmity kontaktu po stoprvní…
20. 11. 2010   #136080

Teď vidím, že ten poslední delay by měl být delší aby během něho proběhly potřebné dvě přerušení.
Začal bych třeba se 100 ms.
Nepříjemné je to, že čím hustší budou přerušení, tím delší bude tento delay.

AB
Mikrokontroléry › Zákmity kontaktu po stoprvní…
19. 11. 2010   #136078

V zadání je mnoho neznámých, ale pokud

-jde o něco jako spínač na kole pro měření doby otáčky
-doba sepnutí je proti periodě krátká
-nemusí se měřit každá perioda
-nevadí zpoždění v ISR

zkusil bych něco takového:

volatile uint16_t interval;


ISR(INT0_vect)
{
uint16_t count;
static uint16_t count_old;

count = TCNT1;
interval = count - count_old;
count_old = count;
_delay_ms(25); //překlenutí zákmitů
GIFR = (1<<INTF0); //nuluj flag
}


int main()
{
uint16_t period;

TCCR1B = 3; //start timer1, prescale = 64
MCUCR = 3; //přerušení vzestupnou hranou
GICR = (1<<INT0); //povol přerušení

for(;;)
{
cli();
period = interval;
printf("%u", period);
// jiné činnosti
sei();
_delay_us(10);
}
}

AB
Mikrokontroléry › Zákmity kontaktu po stoprvní…
19. 11. 2010   #136037

Jestli čas mezi sepnutími je 25ms a kontakt zakmitává 50 ms tak bude nadějnější zabývat se kvadraturou kruhu, než tímto problémem.
Chce to buď kvalitní kontakt (prý existují takové, které zakmitávají pod 10ms), nebo použít jiné čidlo, fotodiodu, Hall.

AB
Mikrokontroléry › Teplotní čidlo TMP100 a Code…
2. 11. 2010   #135309

    i2c_init();

i2c_start();
i2c_write(0x9C); \\Adresa čidla je 9C pro zápis
i2c_write(0x00); \\Výběr registru s hodnotou teploty
i2c_write(0x9D); \\Adresa čipu pro čtení (9D)
t1=i2c_read(0); \\Uložení MSB slova
t2=i2c_read(0); \\Uložení LSB slova
i2c_stop();

Myslím že má být
    i2c_init();

i2c_start();
i2c_write(0x9C); \\Adresa čidla je 9C pro zápis
i2c_write(0x00); \\Výběr registru s hodnotou teploty
i2c_start();
i2c_write(0x9D); \\Adresa čipu pro čtení (9D)
t1=i2c_read(1); \\Uložení MSB slova ACK
t2=i2c_read(0); \\Uložení LSB slova NACK
i2c_stop();

Pak oba bajty sloučit do wordu, pomocí itoa() převést na string a zobrazit.

AB
Mikrokontroléry › Tlačítko
1. 11. 2010   #135281
AB
Mikrokontroléry › Tlačítko
31. 10. 2010   #135183

Oprava:
Omlouvám se, hlavní smyčka má být

   Do

If Tlacitko = 0 Then
Toggle State
Waitms 100
While Tlacitko = 0 : Wend

If State = 0 Then
Gosub Blik1
Else
Gosub Blik2
End If

End If
Loop

AB
Mikrokontroléry › Tlačítko
31. 10. 2010   #135182

V těchto programech s blikajícími ledkami zaberou nejvíc času čekací smyčky "wait".
Podprogram, i když má šedesát řádků, trvá bez čekacích smyček v řádu mikrosekund.
Proto pokud chceme rychlou reakci na tlačítko, stačí tlačítko testovat v krátkých intervalech uvnitř těchto smyček.
Když zjistíme stisknuté tlačítko, vrátíme se do hlavního programu a tam se rozhodne, který podprogram dál zavolat.

Je to samozřejmě jedno z více možných řešení.
Přikládám stručný příklad

Tlacitko Alias Pind.6

Dim State As Bit
Dim I As Word

Do
If Tlacitko = 0 Then
Toggle State
Waitms 100
End If

If State = 0 Then
Gosub Blik1
Else
Gosub Blik2
End If

While Tlacitko = 0 : Wend
Loop
End
'----------------------------------------------------------

Blik1:
Do
Incr Portb

'čekej 2000 ms a testuj tlačítko
For I = 1 To 2000
Waitms 1
If Tlacitko = 0 Then Exit Do
Next
Loop
Return

AB
Mikrokontroléry › LM35 Atmega88
20. 9. 2010   #133737

Ahoj,

Zkus toto:
Pin AVCC je na +5V.
Na pinu AREF je jen kond proti zemi !!

#include <mega88.h>  

#include <stdlib.h>
#include <lcd.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x0B ;PORTD
#endasm

//definice I/O bitů
#define REFS0 6
#define ADSC 6
#define ADEN 7
#define ADPS2 2
#define ADPS1 1
#define ADPS0 0

#define REF (1<<REFS0) // REFS1=0 REFS0=1 => Reference = AVCC
#define Uref 5000 // referenční napětí 5000 mV (přesnou hodnotu změřit na pinu AREF)

//-----------------------------------------------------------------------------
unsigned int read_adc(unsigned char kanal)
{
ADMUX = REF | kanal;
ADCSRA |= (1<<ADSC); // start převodu
while (ADCSRA & (1<<ADSC)); // čekej na konec převodu.
return ADCW;
}

//-----------------------------------------------------------------------------
main(void)
{
unsigned long adc_value, napeti0, napeti1;
static char tempstr[10];

//Init Ports
PORTC = 0x00;
DDRC = 0x00;

//Init ADC
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // zapni ADC ; předdělič 128

//Init LCD
lcd_init(16);

while (1)
{
adc_value = read_adc(0);
napeti0 = (adc_value * Uref) / 1024; // napětí v mV
adc_value = read_adc(1);
napeti1 = (adc_value * Uref) / 1024; // napětí v mV

itoa(napeti0,tempstr);
lcd_gotoxy(3,0);
lcd_puts(tempstr);
delay_ms(500);
}
}

AB
Mikrokontroléry › AVR přerušení program
27. 6. 2010   #130783

je tam nutný psát sei(); globální přerušení, když ho tam dám tak mi to spousti program pořád od začátku


sei() je jistě nutné, pokud chceš používat nějaké přerušení.

Program ti spouští stále od začátku proto, že máš povolené přerušení od zachycení u timer1
TIMSK = 0x20;
a nemáš pro ně napsanou obsluhu.

Jinak, při všem respektu, tvůj program je jeden velký zmatek, který tak jak je ani nejde zkompilovat,
protože ukazuje 5 chyb.

Chtělo by to nastudovat přerušení a čítače.

AB
Mikrokontroléry › AT89C2051 regulace PWM
9. 5. 2010   #128656


Mimo jiné čteš první hodnotu čítače v nedefinovaném okamžiku.
Pokud ji chceš číst při vzestupné hraně, použij

jb VSTUP,$
jnb VSTUP,$
přečti první hodnotu čítače
jb VSTUP,$
jnb VSTUP,$
přečti druhou hodnotu čítače

 

 

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