Jaki port COM dla przejściówki RS232<->USB

Wszystko związane z jądrem systemowym, sterownikami, sprzętem itp.
Awatar użytkownika
pawkrol
Moderator
Posty: 939
Rejestracja: 03 kwietnia 2011, 10:25

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: pawkrol »

Zobacz czy user na którym uruchamiasz putty ma uprawnienia do portu, z tego co kojarze musisz należeć do grupy dialout. Z shella nie wykonujesz polecenia przypadkiem jako root?
Polecam też wpisanie sobie takie sprzętu do udev, żeby zawsze był pod tym samym aliasem.
Co do ustawień samego portu, to ja osobiście ustawiam tylko baud reszta domyślnie i działa (AVR chodzi na 8n1 9600).
Awatar użytkownika
arturromarr
Beginner
Posty: 190
Rejestracja: 14 sierpnia 2015, 01:21

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: arturromarr »

Działa ci już?
Co chcesz na AVRze ciekawego zrobić, jakiś projekt czy nauka?
jacekj11
Posty: 85
Rejestracja: 05 listopada 2011, 15:13

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: jacekj11 »

Puki co nauka, słabo jest u mnie z pisaniem kodu, więc staram się ruszyć z tym na ile mi czas pozwala. Działało ale już miałem tak namieszane że kompilacja kodu do 50 linijek w Eclipse trwała ponad 5 sekund więc musiałem przeinstalować system. Po każdym restarcie musiałem udostępniać z poziomu roota port na którym była przejściówka USB<->RS232, teraz nie pamiętam co pisałem żeby udostępnić port więc nie mogę ruszyć dalej.
Co do nauki programowania czytam powoli Kardasia i staram się w miarę swoich możliwości zrozumieć jego przykłady.
Awatar użytkownika
arturromarr
Beginner
Posty: 190
Rejestracja: 14 sierpnia 2015, 01:21

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: arturromarr »

Po stronie Linuxa zainstaluj sobie jakiś graficzny terminal szeregowy:
-cutecom - dostępny w standardowych repozytoriach, albo taki którego ja używam
-moserial - można łatwo zainstalować z jakiejś paczki deb dla Ubuntu.
Z poziomu root-a dodajesz normalnego użytkownika do grupy dialout:

Kod: Zaznacz cały

adduser twój_user dialout
Ja musiałem zrestartować system i po zalogowaniu jako zwykły użytkownik i odpaleniu moserial, w ustawieniach portu mam urządzenie: /dev/ttyUSB0

Od strony pisania kodu pod AVR na początek wystarczy zwykły edytor np. Geany i plik make. Będzie się błyskawicznie kompilować.
jacekj11
Posty: 85
Rejestracja: 05 listopada 2011, 15:13

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: jacekj11 »

arturromarr pisze: 18 grudnia 2018, 16:47 ...Od strony pisania kodu pod AVR na początek wystarczy zwykły edytor np. Geany i plik make. Będzie się błyskawicznie kompilować.
Chciaa bym spróbować Geany bo Eclipse neon działa mi tragicznie powoli. Mógł byś mi napisać krok po kroku jak jak mam go skonfigurować do pracy z AVRami, albo dać jakiś link najlepiej po polsku.
Awatar użytkownika
arturromarr
Beginner
Posty: 190
Rejestracja: 14 sierpnia 2015, 01:21

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: arturromarr »

Dlatego zaproponowałem Geany, ponieważ on nie wymaga praktycznie konfiguracji. Wszystko kontroluje plik makefile, który musi się znajdować w katalogu projektu.
Jeśli miałeś skonfigurowane Eclipse to pewnie większość pakietów masz zainstalowaną, ale upewnij się:
gcc
binutils
pkg-config
gcc-avr
avr-libc
avrdude
binutils-avr
geany
Teraz tworzysz katalog swojego projektu. Na początek zrób w nim najprostszy program, który zawiera się w jednym pliku (ten nic nie robi):
plik: katalog projektu/prog.c

Kod: Zaznacz cały

#include <avr/io.h>
int main(void)
{	
while (1) {
;
	};
	return 0;
}
Teraz tworzysz w tym samym katalogu plik który to skompiluje:
plik: katalog projektu/makefile

Kod: Zaznacz cały

#-----------------------------------------------------------------------
# makefile_AVR
# Prosty plik make do kompilacji programów C dla mikrokontroleró ATmega
# kompilacja jednego wskazanego pliku
#-----------------------------------------------------------------------
# Komendy:
# make = Kompilacja kodu źródłowego.
# make clean = Czyszczenie wyjściowych plików projektu.
# make program = załadowanie kodu do procesora
#-----------------------------------------------------------------------

MCU=atmega16
F_CPU=2000000
CC=avr-gcc
CFLAGS=-g -mmcu=$(MCU) -Wall -Os -DF_CPU=$(F_CPU)
OBJCOPY=avr-objcopy
SRCS=prog.c
TARGET=program
#---------------- Opcje programatora (avrdude) ----------------
AVRDUDE_PROGRAMMER = usbasp
AVRDUDE_CLOCK = 0.5	


all: $(TARGET).hex
$(TARGET).hex : $(TARGET).out
	$(OBJCOPY) -O ihex $(TARGET).out $(TARGET).hex
$(TARGET).out : $(SRCS)
	$(CC) $(CFLAGS) -I./ -o $(TARGET).out $(SRCS)

clean:
	rm -f *.hex *.out

# Programowanie urządzenia.  
program: $(TARGET).hex
	avrdude -p $(MCU) -B $(AVRDUDE_CLOCK) -c $(AVRDUDE_PROGRAMMER)  -U flash:w:$(TARGET).hex
Taki minimalisyczny projekt można już obsługiwać z lini poleceń terminala, ale jak mamy Geany to można sobie poklikać:
Otwierasz w Geany plik programu prog.c
Edytor sam powiąże ten plik z makefile znajdujące się w tym samym katalogu. Wystarczy wybrać z menu: Zbuduj->Make
W katalogu projektu przybędą pliki: program.out i program.hex (nazwy możesz edytować w pliku makefile)
Teraz dla wygody posługiwania się programem warto zdefiniować przyciski w menu dla pozostałych poleceń z pliku makefile:
w menu wybieramy: Zbuduj->Zdefiniuj polecenia budowania->Polecenia uniwersalne
Ja dodaje w pozycjach 3 i 4:
3. [clean] make clean
4. [program] make program
Teraz możesz jednym kliknięciem załadować program do procesora lub wyczyścić katalog projektu.
W pliku makefile musisz ustawić opce avrdude pod programator jaki masz. Ja mam USBASP i taki jest ustawiony.
Napisz jak poszło to spróbujemy z bardziej uniwersalnymi plikami makefile.
jacekj11
Posty: 85
Rejestracja: 05 listopada 2011, 15:13

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: jacekj11 »

Witam dawno się nie odzywałem ale nie było czasu. To co napisał arturromarr działa idealnie.
Czy jest możliwość żeby program sam wykrywał jaki procesor jest podłączony do programatora?
Awatar użytkownika
arturromarr
Beginner
Posty: 190
Rejestracja: 14 sierpnia 2015, 01:21

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: arturromarr »

Wszystko jest możliwe, ale to ma niewielki sens. Wysiłek polegający na wpisaniu procesora jest niewielki.
Lepiej skupić się na pisaniu programu, który przecież też musi być pisany pod konkretny procesor.
jacekj11
Posty: 85
Rejestracja: 05 listopada 2011, 15:13

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: jacekj11 »

To w takim razie napisz jak skonfigurować makefile jeżeli w projekcie mam kilka plików *.h i *.c w różnych katalogach i chcę procesor taktować z zewnętrznego kwarcu.
Awatar użytkownika
arturromarr
Beginner
Posty: 190
Rejestracja: 14 sierpnia 2015, 01:21

Re: Jaki port COM dla przejściówki RS232<->USB

Post autor: arturromarr »

Przykład dla programu składającego się z dwóch plików c oraz odpowiadającym im dwóm plikom h

makefile

Kod: Zaznacz cały

MCU = atmega8
F_CPU = 8000000

# Format wyjściowy. (może być: srec, ihex, binary)
FORMAT = ihex

# Nazwa pliku wyjściowego (bez rozszerzenia).
TARGET = MediVent

# Katalog dla plików obiektowych: Umieszcza pliki w osobnym katalogu, użyć kropki aby nie korzystał z katalogu
OBJDIR = obj_files

# Lista plików źródłowych.
SRC =main.c rejestr.c

# Poziom optymalizacji, może być: [0, 1, 2, 3, s]. 0 = brak. s = ze względu na rozmiar.
OPT = s

# Flaga kompilatora do standardu C. c89 = "ANSI" C gnu89 = c89 plus GCC extensions gnu99 = c99 plus GCC extensions
CSTANDARD = -std=gnu99

# Umieść -D lub -U opcję dla źródeł C
CDEFS = -DF_CPU=$(F_CPU)UL

#---------------- Opcje kompilatora C ----------------
CFLAGS = -g$(DEBUG)
CFLAGS += $(CDEFS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char
CFLAGS += -funsigned-bitfields
CFLAGS += -fpack-struct
CFLAGS += -fshort-enums
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)

#---------------- Opcje bibliotek ----------------
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
MATH_LIB = -lm

#---------------- Opcje linkera ----------------
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)

# Definicje komend.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
AR = avr-ar rcs
NM = avr-nm
REMOVE = rm -f
REMOVEDIR = rm -rf
COPY = cp
WINSHELL = cmd

# Definicje komunikatów: Polski
MSG_BEGIN = -------- start --------
MSG_END = --------  koniec  --------
MSG_SIZE_BEFORE = Rozmiar przed: 
MSG_SIZE_AFTER = Rozmiar po:
MSG_FLASH = Tworzenie pliku ładującego Flash:
MSG_LINKING = Linkowanie:
MSG_COMPILING = Kompilacja C:
MSG_CLEANING = Czyszczenie projektu:

# Definiuj wszystkie pliki obiektowe.
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 

# Połącz wszystkie niezbędne i opcjonalne flagi. Dodaj proces docelowy do flag.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)

#===================================================================================================
# Podstawowy cel.
all: begin sizebefore build sizeafter end

build: elf hex

elf: $(TARGET).elf
hex: $(TARGET).hex

begin:
	@echo
	@echo $(MSG_BEGIN)

end:
	@echo $(MSG_END)

# Wyświetlenie rozmiarów plików.
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf

sizebefore:
	@if test -f $(TARGET).elf; then echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
	2>/dev/null; fi

sizeafter:
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
	2>/dev/null; fi

# Utworzenie pliku wyjściowego (.hex) z pliku ELF.
%.hex: %.elf
	@echo
	@echo $(MSG_FLASH) $@
	$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@

# Linkowanie: Utworzenie pliku wyjściowego ELF z plików obiektowych.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
	@echo
	@echo $(MSG_LINKING) $@
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)


# Kompilacja: Utworzenie plików obiektowych z plików źródłowych c.
$(OBJDIR)/%.o : %.c
	@echo
	@echo $(MSG_COMPILING) $<
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 

# Tworzenie katalogu dla plików obiektowych
$(shell mkdir $(OBJDIR) 2>/dev/null)

#===================================================================================================
# Czyszczenie projektu.
clean: begin clean_list end

clean_list :
	@echo
	@echo $(MSG_CLEANING)
#	$(REMOVE) $(TARGET).hex
	$(REMOVE) $(TARGET).elf
	$(REMOVE) $(TARGET).map
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
	$(REMOVEDIR) $(OBJDIR)
main.c

Kod: Zaznacz cały

/****************************************************************
 *  FUSE: LOW  11111110 >0xFE -zew 8MHz, 4ms, bez BOD           *
 *        HIGH 11011001 >0xD9 -bez JTAG                      	*
****************************************************************/

#include <avr/io.h>				// dostęp do rejestrów
.....
#include "rejestr.h"			// plik nagłówkowy rejestru SPI
#include "main.h"
........
int main(void)
{
.........
return 0;
}
main.h

Kod: Zaznacz cały

#ifndef MAIN_H
#define MAIN_H

..............

int main(void);

#endif

rejestr.c

Kod: Zaznacz cały

#include <avr/io.h>
#include "rejestr.h"
..........
rejestr.h

Kod: Zaznacz cały

#ifndef REJESTR_H
#define REJESTR_H
............
#endif
Kropeczki do uzupełnienia samemu.

Ustawić zegar zewnętrzny musisz programując FUSE bity w programatorze zgodnie z dokumentacją użytego procesora. W makefile jest wpisany zegar, ale jest to tylko parametr informacyjny przekazywany do wszystkich plików.
Do FUSE bitów są wygodne kalkulatory online:
http://www.engbedded.com/fusecalc/
ODPOWIEDZ