To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
-
radzio
- Użytkownik
- Posty: 573
- Rejestracja: 07 gru 2004, 23:06
- Lokalizacja: Sosnowiec
-
Kontakt:
Post
autor: radzio » 27 paź 2011, 19:11
Ale jaki to problem? Po prostu nie zdefiniowałeś funkcji main.
-
dondu
- Użytkownik
- Posty: 211
- Rejestracja: 24 maja 2005, 9:47
- Lokalizacja: Śląskie
-
Kontakt:
Post
autor: dondu » 27 paź 2011, 19:33
Kompilujesz NIC, to i efekt jest do NICZEGO
Return jest zbędne, bo program musi się zapętlić, więc mała sugestia:
Kod: Zaznacz cały
int main(void)
{
while(1){ //pętla nieskończona
}
}
-
radzio
- Użytkownik
- Posty: 573
- Rejestracja: 07 gru 2004, 23:06
- Lokalizacja: Sosnowiec
-
Kontakt:
Post
autor: radzio » 27 paź 2011, 19:35
dondu pisze:
Return jest zbędne
Nie jest zbędne. avr-gcc będzie zgłaszało warningi jak return nie bedzie. Pętla to sprawa oczywista.
-
dondu
- Użytkownik
- Posty: 211
- Rejestracja: 24 maja 2005, 9:47
- Lokalizacja: Śląskie
-
Kontakt:
Post
autor: dondu » 27 paź 2011, 19:37
radzio pisze:dondu pisze:
Return jest zbędne
Nie jest zbędne. avr-gcc będzie zgłaszało warningi jak return nie bedzie. Pętla to sprawa oczywista.
A skąd takie informacje?
Mówimy o kompilatorze GCC, więc return jest niepotrzebny, a warningów nie będzie.
-
radzio
- Użytkownik
- Posty: 573
- Rejestracja: 07 gru 2004, 23:06
- Lokalizacja: Sosnowiec
-
Kontakt:
Post
autor: radzio » 27 paź 2011, 19:41
Racja, warningów nie będzie.
-
Dawid2379
- Użytkownik
- Posty: 318
- Rejestracja: 17 lis 2010, 19:42
- Lokalizacja: Kluczbork
-
Kontakt:
Post
autor: Dawid2379 » 27 paź 2011, 19:45
Teraz jest ok:) teraz rozwiązuje problem z programatorem jak się nie uda wyśle okienko jakie się pojawia podczas próby programowania niczego
-
Dawid2379
- Użytkownik
- Posty: 318
- Rejestracja: 17 lis 2010, 19:42
- Lokalizacja: Kluczbork
-
Kontakt:
Post
autor: Dawid2379 » 04 lis 2011, 20:02
Właśnie przerabiałem pierwszy program z dioda LED. Czytając niby zrozumiale ale samemu chce przerobić go tak żeby w jakiejś kolejności mrugały diody LED które już zdefioniowalem lecz nie wiem co wpisać po while??
#include <avr/io.h>
#include <util/delay.h>
//definicje dla procesora
#define LED_PIN3 (1<<PB3)
#define LED_PIN2 (1<<PB2)
#define LED_PIN1 (1<<PB1)
#define LED_ON PORTB &= LED_PIN //stan 1 na pinie
#define LED_OFF PORTB |= LED_PIN //stan 0 na pinie
#define LED_TOG PORTB ^= LED_PIN1 //zmiana stanu
#define LED_TOG PORTB ^= LED_PIN2
#define LED_TOG PORTB ^= LED_PIN3
//*******************************
int main(voild)
{
//ustawienie wyjsc na 0
DDRB |= ( (LED_PIN3)|(LED_PIN2)|(LED_PIN1) );
//wykonaj polecenia
while(1)
{
LED_TOG ;
_delay_ms(1000);
}
}
-
dondu
- Użytkownik
- Posty: 211
- Rejestracja: 24 maja 2005, 9:47
- Lokalizacja: Śląskie
-
Kontakt:
Post
autor: dondu » 05 lis 2011, 15:15
Zacznij od tego, że ignorujesz warningi:
Build started 5.11.2011 at 15:12:47
../Proba_22.c:11:1: warning: "LED_TOG" redefined
../Proba_22.c:10:1: warning: this is the location of the previous definition
../Proba_22.c:12:1: warning: "LED_TOG" redefined
../Proba_22.c:11:1: warning: this is the location of the previous definition
../Proba_22.c: In function 'main':
../Proba_22.c:16: warning: type of 'voild' defaults to 'int'
avr-gcc -mmcu=atmega8 -Wl,-Map=Proba_22.map Proba_22.o -o Proba_22.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature Proba_22.elf Proba_22.hex
avr-objdump -h -S Proba_22.elf > Proba_22.lss
AVR Memory Usage
----------------
Device: atmega8
Program: 94 bytes (1.1% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Build succeeded with 5 Warnings...
a to 10 stopień do Piekła początkujących:
http://mikrokontrolery.blogspot.com/201 ... acych.html
-
Dawid2379
- Użytkownik
- Posty: 318
- Rejestracja: 17 lis 2010, 19:42
- Lokalizacja: Kluczbork
-
Kontakt:
Post
autor: Dawid2379 » 13 lis 2011, 16:47
Postanowilem inaczej pisac kod troche bardziej dla mnie zrozumialy, mam jednak problem instrukcje sa wykonane mimo tego ze warunek nie jest spelniony po if?? zmienielem tylko wejscia i wyjscia z gotowego kodu bo mam ATiny 2313 a nie aTmega 8 warningow juz nie ma
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF;
PORTB = 0xFF;
DDRD = 0x1F;
PORTD = 0xFF;
while(1)
{
if(!(PIND & 0x40))
PORTB = 0x3C;
PORTD = 0xFF;
_delay_ms(1000);
PORTB = 0xC3;
_delay_ms(1000);
if(!(PIND & 0x20))
PORTD = 0x1F;
PORTB = 0xFF;
_delay_ms(1000);
PORTD = 0x10;
_delay_ms(1000);
}
}
-
timo66
- Moderator
- Posty: 1807
- Rejestracja: 20 maja 2006, 19:15
- Lokalizacja: 66'15" M.a.R.s.
-
Kontakt:
Post
autor: timo66 » 13 lis 2011, 18:10
umieszczaj kod programu w tagach "[code.] " , kod jest bardziej czytelny.
Dawid2379 pisze:Postanowilem inaczej pisac kod troche bardziej dla mnie zrozumialy, mam jednak problem instrukcje sa wykonane mimo tego ze warunek nie jest spelniony po if?? zmienielem tylko wejscia i wyjscia z gotowego kodu bo mam ATiny 2313 a nie aTmega 8 warningow juz nie ma
Kod: Zaznacz cały
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF;
PORTB = 0xFF;
DDRD = 0x1F;
PORTD = 0xFF;
while(1)
{
if(!(PIND & 0x40))
PORTB = 0x3C;
PORTD = 0xFF;
_delay_ms(1000);
PORTB = 0xC3;
_delay_ms(1000);
if(!(PIND & 0x20))
PORTD = 0x1F;
PORTB = 0xFF;
_delay_ms(1000);
PORTD = 0x10;
_delay_ms(1000);
}
}
-
Dawid2379
- Użytkownik
- Posty: 318
- Rejestracja: 17 lis 2010, 19:42
- Lokalizacja: Kluczbork
-
Kontakt:
Post
autor: Dawid2379 » 13 lis 2011, 18:22
Sory juz bede pisał jak kolega poleca, a co z tym kodem nie tak, instrukcja powinna byc wykonana po przycisnieciu klawisza jak i druga ale wszystko leci po kolei, napewno wszystko podlaczylem dobrze i diody i dwa przyciski.
-
keruseykaryu
Post
autor: keruseykaryu » 13 lis 2011, 18:42
Dawid2379 pisze:mam jednak problem instrukcje sa wykonane mimo tego ze warunek nie jest spelniony po if??
Skąd wiesz, że warunek nie jest spełniony. Prześledź te operacje jeszcze raz. No i brakuje klamerek.
-
Dawid2379
- Użytkownik
- Posty: 318
- Rejestracja: 17 lis 2010, 19:42
- Lokalizacja: Kluczbork
-
Kontakt:
Post
autor: Dawid2379 » 13 lis 2011, 19:03
A teraz będzie spełniony bo działa jak przytrzymam przycisk no i kwestia aby instrukcje działały po jednorazowym kliknięciu na okrągło jednego bądź drugiego przycisku, no ale nie wiem jak to zrobić
Kod: Zaznacz cały
int main(void)
{
DDRB = 0xFF;
PORTB = 0xFF;
DDRD = 0x1F;
PORTD = 0xFF;
while(1)
{
if(!(PIND & 0x40))
{
PORTB = 0x3C;
PORTD = 0xFF;
_delay_ms(1000);
PORTB = 0xC3;
_delay_ms(1000);
}
if(!(PIND & 0x20))
{
PORTD = 0x1F;
PORTB = 0xFF;
_delay_ms(1000);
PORTD = 0x10;
_delay_ms(1000);
}
}
}
[/code]
-
keruseykaryu
Post
autor: keruseykaryu » 13 lis 2011, 20:00
Dawid2379 pisze:A teraz będzie spełniony bo działa jak przytrzymam przycisk no i kwestia aby instrukcje działały po jednorazowym kliknięciu na okrągło jednego bądź drugiego przycisku, no ale nie wiem jak to zrobić
Na zasadzie: słoma - siano. Co innego czytanie klawiszy, a co innego robienie efektu.
Dwie flagi programowe, licznik i przerwania, no i nieco pomyśleć jak to pokleić by razem grało do tej samej bramki.
-
Dawid2379
- Użytkownik
- Posty: 318
- Rejestracja: 17 lis 2010, 19:42
- Lokalizacja: Kluczbork
-
Kontakt:
Post
autor: Dawid2379 » 14 lis 2011, 19:54
No dobra to muszę poczytać o flagach itp, dla podpowiedzi jakich funkcji użyłbyś w takim programie? Widzę ze to nie będzie takie proste ja na razie bawiłem się bitami nie konkretnymi funkcjami, tablicami czy operatorami itp itd ,jestem kompletnie zielony i nie miałem styczności ale postaram się poszukać sposobu, każda podpowiedz może pomóc przybliżyć mi rozwiązane problemu. Dzieki