Programownie w C

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!
kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Programownie w C

Post autor: kaliska5 » 11 lip 2009, 16:30

Witam.Przerzucam sie powoli c bascoma na C i mam problem.Szukaleł w internecie kursów C dla AVR ale większość z nich jest przestarzała.Obecnie czytam
Link1
Link2
Link3

Znacie jakieś nowsze kursy najlepiej łopatologicznych :mrgreen: ?
Szukam także opisu rejestrów procesora attiny2313/atmega8 po polsku. Wiem ze wszystko jest w nocie ale na początek najlepiej by było po polsku bawiąc sie bascomem nie zwracałem uwagi na rejestry itp.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 11 lip 2009, 17:01

Dobry kurs GCC był prezentowany na łamach EdW.

Natomiast po nazwy rejestrów zaglądam do not katalogowych (niestety po angielsku) dostępnych na stronie producenta, pomagając sobie słownikiem dostępnym w internecie.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 11 lip 2009, 18:23

Wątpie że znajdziesz coś po polsku. Kiedyś ktoś przetłumaczył do atmega16 czy 32 w sieci. Co do aktualności kursu to chyba ten ostatni link będzie najświeższy.

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 11 lip 2009, 21:07

Mam problem w tym kursie pisze ze

Kod: Zaznacz cały

cbi(DDRB,7);	// użyj linii PB7 jako wejścia
sbi(PORTB,7);	// "podciągnij" do logicznej 1 linię PB7
lecz gdy próbuje tego użyć nie mogę skompilować.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 11 lip 2009, 21:11

Dodaj na początku:

Kod: Zaznacz cały

#include <compat/deprecated.h>
Lub przerób:

Kod: Zaznacz cały

cbi(DDRB,7);  
sbi(PORTB,7);
na

Kod: Zaznacz cały

DDRB&=~(1<<7);
PORTB|=(1<<7);
lub

Kod: Zaznacz cały

DDRB&=~(1<<PB7);
PORTB|=(1<<PB7);

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 11 lip 2009, 22:01

Wlasnie szukam po roznych kursach ale nie ma tam dokladnie wytlumaczone

Kod: Zaznacz cały

DDRB&=~(1<<7);
PORTB|=(1<<7); 
dlaczego nie moze byc DDRB=~(1<<7); do czego sluzy ten & i |

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 11 lip 2009, 22:08

Są to operatory logiczne do operacji na bitach. W przypadku DDRB=x; zmieniasz wartość całego rejestru DDRB a nie poszczególnych bitów.

| suma bitowa(OR)
& iloczyn bitowy

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 11 lip 2009, 22:21

Ni w ząb tego nie kapuje bascom zeżarł mi mozg :mrgreen: Czy

Kod: Zaznacz cały

_BV(INT0)
oznacza to samo co INT0=0x01?

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 11 lip 2009, 22:24

_BV(x) to to samo co (1<<x)

Generalnie zaleca się stosować zapis (1<<x) gdyż z tego co gdzieś czytałem ma być wycofane z kompilatora _BV(x), tak jak to miało miejsce z cbi, sbi i paroma innym funkcjami przerzuconymi do deprecated.h

Banan
-
Posty: 10
Rejestracja: 11 lip 2009, 23:15
Lokalizacja: Pisz
Kontakt:

Post autor: Banan » 11 lip 2009, 23:46

Ja próbowałem się uczyć programowanie avr zaczynając od C (na komputerze całkiem sprawnie umiem się tym językiem posługiwać) i średnio mi to szło. Zainteresowałem się podstawami assemblera i architektury i dzięki temu dużo szybciej widzę efekty niż pisząc w samym C nie mając pojęcia o assemblerze.

Do języka C przydaje się znajomość dosyć dobra znajomość architektury:
Kilka przydatnych źródełek:
http://www.jaglarz.com/ja/elektronika/a ... l_1362.pdf
http://www.jaglarz.com/ja/elektronika/atmega128.pdf -spolszczona nota!!
http://www.mimuw.edu.pl/~marpe/mikrokon ... 00809.html
http://atmega32.republika.pl/
http://www.jaglarz.com/ja/elektronika/ds18b20.pdf
Kilka stronek z elementami języka C
http://radzio.dxp.pl/
http://www.voytek.tkdami.net/111.html -całkiem ładnie rozpisana obsługa przetwornika ADC
http://www.wkretak.pl/articles.php?cat_id=1 - fajnie opisane timery itp
Angielsko języczce:
http://www.avrfreaks.net/index.php?name ... 902fd0fd97


Przykłady w języku C operacji bitowych (na zwykły komputer), może to pomóc zrozumieć co nieco.
http://dane.eia.edu.pl/banan/Sem%20III/ ... bitowe.doc

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 12 lip 2009, 8:13

Witam wszystkich,
przy programowaniu w C ważna jest praca z notą katalogową.
Kolega kaliska5 chcesz po prostu ustawić PB.7 jako wejście z podciągniętym rezystorem. Robi się to tak:

Kod: Zaznacz cały

DDRB &= ~_BV(DDB7);
To ustawienie w rejestrze DDRB siódmego bitu jako zero, czyli wejście.

Kod: Zaznacz cały

DDRB |= _BV(DDB7);
To byłoby ustawienie tego samego bitu jako jeden, czyli wyjście.

Podobnie jest z rejestrem PORTx.

Kod: Zaznacz cały

PORTB &= ~_BV(PORTB7);
Ustawienie w rejestrze PORTB siódmego bitu jako zero. Co oznacza przy nóżce ustawionej jako wejście, że nie ma rezystora podciągającego, natomiast przy wyjściu stan niski, czyli "zwarte" do masy.

Kod: Zaznacz cały

PORTB |= _BV(PORTB7);
To również ustawia ten sam bit tylko, że na jeden. Oznacza to, że przy wejściu jest podłączony rezystor podciągający, a przy wyjściu nóżka ma stan wysoki, czyli "zwarte" do VCC(typ: 5V).

Pozdrawiam ;)

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 12 lip 2009, 8:52

Dzięki Banan za linki tego szukałem :wink: Działanie rejestrów DDRX, PORTX i reszty podstawowych rozumiem dla mnie gorsze jest zrozumienie składni C.

Banan
-
Posty: 10
Rejestracja: 11 lip 2009, 23:15
Lokalizacja: Pisz
Kontakt:

Post autor: Banan » 12 lip 2009, 9:34

Tu masz trochę edukacyjnych aplikacji w samym C (nie na AVR)
http://dane.eia.edu.pl/banan/Sem%20III/ ... a/Zadania/
(niektóre zawierają drobne błędy, ale nie chce mi się ich poprawiać)
Zwróć szczególnie uwagę na wskaźniki

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 12 lip 2009, 11:01

Wytłumaczcie mi tylko czym różnią się te zapisy :

Kod: Zaznacz cały

DDRB &= ~_BV(DDB7)
DDRB &= ~_BV(DDB7)
DDRB |= ~_BV(DDB7)
DDRB ^= ~_BV(DDB7)
Od czego zależy czy jest &, | lub ^ wiem ze to sa operatory bitowe ale nie kapuje po kiego tutaj sa potrzebne

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 12 lip 2009, 11:09

Znasz z matematyki iloczyn logiczny, a może z elektroniki bramki AND, OR, XOR :?:

ODPOWIEDZ