uC

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!
Awatar użytkownika
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.

Kod: Zaznacz cały

int main(void)
{

return 0;
}

Awatar użytkownika
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

   }
}

Awatar użytkownika
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.

Awatar użytkownika
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.

Awatar użytkownika
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.

Awatar użytkownika
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

Awatar użytkownika
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);
}

}

Awatar użytkownika
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

Awatar użytkownika
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);

}

}

Awatar użytkownika
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);
     
   }
   
}

Awatar użytkownika
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.

Awatar użytkownika
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.

Awatar użytkownika
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

ODPOWIEDZ