Dobry den,
nedari se mi naprogramovat funkcni AT90PWM316 pres gcc-avr
assembler v AVRStudiu4 me na chipu bezi!
programuji chip pres ISP STK500, pouzivam avrdude dle manualu,
pro ukazku prikladam zdroj v C a vysledny disassemblovany ELF
mate nekdo funkcni prostredi s ukazkou pro GNU AVR? na Linux...
Diky David
#include <avr/io.h>
#include <stdlib.h>
int main(void)
{ DDRC = 0xff; //port C jako výstupní
while(1)
{ PORTC = 0b11111111; //zhasnutí všech LED diod
for(unsigned char n=0;n<16;n++)
{
if (n< //dokud nedojdeš na poslední pozici
{ PORTC <<=1; //tak posunuj doleva
}
else //když si dojel nakonec
{
PORTC <<=1; //tak posunuj doleva
PORTC |= 0x01; //a zprava doplň jedničku
}
int i;
i=1;
while(i<255)
i++;
}
}
}
LDI REG,$FF
OUT DDR,REG
LDI REG,LOW(RAMEND)
OUT SPL,REG
LDI REG,HIGH(RAMEND)
OUT SPH,REG
LDI REG,$FF
LDI R20,1
SMYCKA: OUT PORT,REG
RCALL CEKEJ
ADD REG,R20
RJMP SMYCKA
CEKEJ:
LDI R17,36
CYK3: LDI R18,150
CYK2: LDI R19,250
CYK1: DEC R19
BRNE CYK1
DEC R18
BRNE CYK2
DEC R17
BRNE CYK3
RET
cokoliv podobne v "Ccku" NE! potreboval bych tedy neco?
ukazkovyho funkcniho Cckovyho.... ale nejdriv zkusim
nahrat hex file nejakeho funkcniho assembleru a flashnu ho
pres avrdude a pak napisu Zatim diky
tak avrdude je OK naflashuje chip...
avr-objcopy -j .text -j .data -O ihex led.elf led.hex
avr-objcopy -O ihex -R .eeprom data.elf data.hex
bohuzel generuje neco odlisnyho nez AVRStudio4 z assembleru
v pripade podobnyho led.c a led.asm...
jak pokracovat?
diky Dave
int main(void)
{
DDRC = 0xFF; //Nakes PORTC as Output
while(1) //infinite loop
{
PORTC = 0xFF; //Turns ON All LEDs
int i;
i=1;
while(i<255)
i++;
PORTC= 0x00; //Turns OFF All LEDs
i=1;
while(i<255)
i++;
}
}
avr-gcc teda neco vykompilovalo, chip je naprosto chaotickej
chaotickej puls na pinech brany PortD a PortC
chip danej uplne novej... fuse nastaveny dle avrdude s krystalem 8MHz
Zkusil jsem tvůj příklad dát do AVR Studio.
Pokud je zapnutá optimalizace, avr-gcc ignoruje kód, který nemá na funkci vliv.
V tomto konkrétním případě vyhodil proměnnou "i", protože není "volatile".
avr-gcc -mmcu=at90pwm316 -nostdlib -g -o blikac-ukazka.elf blikac-ukazka.c -Wall -I. -Wcpp -lgcc
>>> je videt evidentni chyba linkeru! to znamena ze kompilacni prostredi pro AVRko je blbe, jenze otazkou je, jak ho nastavit,??
Nevidím žádnou evidentní chybu linkeru, ty mu tam dáváš přepínač -nostdlib, tj. zakazuješ použití standardních knihoven, a on hlásí, že nemá standardní knihovny.
Na internetu lze dohledat makefile pro kompilování AVR pod Linuxem.
Pokud jednou nastavíš makefile správně. Potom stačí zkompilovat přez příkaz "make".
kód:
# Hey Emacs, this is a -*- makefile -*-
#----------------------------------------------------------------------------
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
#
# Released to the Public Domain
#
# Additional material for this makefile was written by:
# Peter Fleury
# Tim Henigan
# Colin O'Flynn
# Reiner Patommel
# Markus Pfaff
# Sander Pool
# Frederik Rouleau
# Carlos Lamas
#
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device, using avrdude.
# Please customize the avrdude settings below first!
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
#define F_CPU 8000000UL // frekvence CPU v Hz
#include <avr/io.h>
#include <util/delay.h>
void _start(void)
{
DDRC = 0xFF; //Nakes PORTC as Output
while(1) //infinite loop
{
PORTC = 0xFF; //Turns ON All LEDs
_delay_ms(1000);
PORTC= 0x00; //Turns OFF All LEDs
_delay_ms(1000);
}
}
to se sice kompiluje uz bez ld error
avr-gcc -mmcu=at90pwm316 -Wall -O2 -nostdlib -o xx.elf xx.c
ale je to nefunkcni, ...
pricemz s while je kompilat funkcni...
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2, 3Další
Strana 1 z 3
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.