Skocz do zawartości

[Programowanie] Szybki start z WinAVR


Pomocna odpowiedź

kolego dziękuje za zainteresowanie 🙂 ale jednak poprzez ten mostek H to trochę za trudne rozwiązanie 🙁 masz może jakiś inny pomysł ? posiadam

http://programatory.com.pl/sklep/index.php?p156,modul-uruchomieniowy-atmega128

i tak sobie myślałem żeby to wykonać za pomoc potencjometrach jeśli dobrze mówię 😋

wg mnie wyglądało by to tak od pinu pb0 do pinu pb7 zapodać potencjometry od takiego który powodował by na pierwszym pinie to by silniczek pracował na bardzo małych obrotach poprzez naciśniecie guzika zmieniał by sie pin zasilający na pb2 gdzie potencjoimetr by stanowił troszkę mniejsze ograniczenie prędkości i tak do pinu pb 7 gdzie silniczek pracował by na prawie ze maksymalnych obrotach pomysł wydaje mi sie prosty tylko ze pozostaje kwestia kodu :/ program musiał by po każdym naciśnięciu przycisku zmieniać pin wyłączając pierwszy a włączając kolejny 🙁

A jak chcesz podpiac zasilanie pod 8 pinow? :>

Bez mostka H (czy to scalonego czy na elementach dyskretnych) nie zrobisz zmiany polaryzacji czyli bedziesz mial tylko jeden kierunek obrotow.

juz na upartego odpuszczę lewo prawo 🙁 chyba ze wpadnę na jakiś pomysł z serii dziwnych 😋 jak narazie to spaliłem programator tzn nie daje napięcia na moduł uruchomieniowy ale zaraz cosik przylutuje i będzie grało 🙂

Ogółem procek nie uciągnie silnika "prosto z nóżki" - za duży pobór prądu. Czy chcesz, czy nie - jesteś skazany albo na mostek H (możliwość sterowania dwukierunkowego - czyt. lewo-prawo), albo np zwykły tranzystor otwierający i zamykający obwód zasilania silnika (sterowania tranzystora podłączone do mikrokontrolera) ale już bez zmiany kierunku obrotów.

PS Schemat, który przedstawiłem wyżej jest naprawdę banalny - nie ma tam nic prócz mostka i kilkunastu przewodów! A i sterowanie PWM w bascomie to bułka z masłem, zobaczysz!

widzisz kolego nawet nie wiem co to ten mostek H i skad go wziąć :/ znalazłem na kursie

 Wyjścia: PA0,PA1
*/

#define F_CPU 1000000L 
#include <avr/io.h>
#include <util/delay.h>        

int main(void)
{
 /* Definicja zmiennych */
 int t;

 /* P0,P1 -  wyjścia */
 DDRA  = 0x03;  
 PORTA = 0x00;

 /* Główna pętla */
 while(1)
 { 
   /* Pierwsza lampka stopniowo rozjaśnia się,
      druga stopniowo gaśnie
   */
   for(t=0; t<=768; t+=2)
   {  
     PORTA |= 0x01;    // ustawia bit nr 0
     PORTA &= ~0x02;   // kasuje bit nr 1    
     _delay_us(t); // opóźnienie w mikrosekundach

     PORTA &= ~0x01;   // kasuje bit nr 0
     PORTA |= 0x02;    // ustawia bit nr1     
     _delay_us(768-t);
   }  
   /* Pierwsza lampka stopniowo gaśnie,
      druga stopniowo rozjaśnia się
   */    
   for(t=768; t>=0; t-=2)
   {  
     PORTA |= 0x01;
     PORTA &= ~0x02;
     _delay_us(t);
     PORTA &= ~0x01;
     PORTA |= 0x02;
     _delay_us(768-t);  
   }
 }  
}

jednak że u mnie to nie działa chyba przez to ze mam atmege 128 a nie 16 🙁

a co do silniczka to prosto z nóżki to śmiga 🙂

Witam mam problem z zaprogramowaniem uC. Posiadam atmega8 i do tego http://www.wobit.com.pl/download/pdf/przetworniki/MAK50.pdf . Enkoder ma 10 przewodów,które mam podlączyć do uC. 6 z 10 przewodów łącze do portuC, natomiast 4 pozostałe do portu D (mają być wejściami) jak w załączniku. Jak mam ustawić porty, żeby wszystko grało?


DDRC = 0x00;         // PortC jako wejście (6 z 10 przewodow enkodera)
   PORTC = 0x00;        // z podciągnięciem do  GND
DDRD = 0xCC;        // PortD: PD0 oraz PD1 jako wyjscia do MAX232; PD2 PD3 PD6 PD7 jako wejscia (brakujace 4 przewody do enkodera)	
PORTD = CC;		    //dobrze? 	

Czy tak będzie dobrze?

Z góry dzięki za pomoc.

IMG_4aa6280696ae83250.jpg

  • 1 miesiąc później...

jednak że u mnie to nie działa chyba przez to ze mam atmege 128 a nie 16 🙁

a to może działa ino tą atmege widze że ustawiłeś na 1MH i poprostu nie widać jak się diody zmieniają? spróbuj powstawiać tak ze 30 NOPów i zobacz jak sie zachowa albo zmień jeszcze częstotliwość atmegi

  • 1 miesiąc później...
  • 3 tygodnie później...

mogę się podpiąć?

chciałem zrobić to na atmega8 i z zewnętrznym kwarcem 12MHz. zrobiłem dokładnie według instrukcji w pierwszym poście, ale wyskakują mi błędy:

> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20090313) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: bootloader.c
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=12000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./bootloader.lst  -std=gnu99 -MMD -MP -MF .dep/bootloader.o.d bootloader.c -o bootloader.o 
In file included from bootloader.c:25:
d:/winavr/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
bootloader.c:31:20: error: usbdrv.h: No such file or directory
bootloader.c:41: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'replyBuffer'
bootloader.c:42: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'state'
bootloader.c:48: warning: function declaration isn't a prototype
bootloader.c:56: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'usbFunctionSetup'
bootloader.c:91: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'usbFunctionWrite'
bootloader.c: In function 'main':
bootloader.c:138: warning: implicit declaration of function 'usbInit'
bootloader.c:141: warning: implicit declaration of function 'usbPoll'
make.exe: *** [bootloader.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:00

o co chodzi?

Masz błędy w kodzie w liniach: 20, 31, 41, 42, 48, 56, 91, 138, 141... Poza on raczej wyraźnie mówi co mu się nie podoba... Jeśli nie będziesz chciał z nim współpracować to raczej możesz wziąć swój uC i wyrzucić bo na nic ci się on nie przyda

Nie wiem jak to jest dokładnie z plikami z rozszerzeniem ".h". Jak kiedyś programowałem w MS VC++ lub DevC+++ to tam jak się dodało plik takiego typu to dla

#include <NAZWA.h>

szukał on tego pliku w folderze z bibliotekamie np.

c\program files\devc++\library\NAZWA.h

a dla

..\projekt\NAZWA.h

w folderze z projektem

Jak to się ma dla WinAVR i jak się tworzy projekt z kilku plików z rozszerzeniem ".c"??

Jeśli chcesz dołączyć pliki *.h znajdujący się w katalogu projektu, to piszesz np. tak:

#include "lcd.h"

#include "ds18b20.h"

czyli nazwy dołączanych plików objęte są parą cudzysłowów.

Żeby skompilować program składający się z kilku plików *.c, wpisuje się ich nazwy do pliku Makefile, wspominałem o tym w artykule.

  • 2 miesiące później...

Po-uprawiam trochę archeologii, ale lepsze to niż nowe tematy 😋

Czy WinAVR i AVRdude grają bez problemu na Windozie 7 64bit?

Czy WinAVR i AVRdude grają bez problemu na Windozie 7 64bit?

Odpisuję na podstawie swoich doświadczeń z Vista64. Myślę. że nie powinno być większych różnic w Win7, ale to będę mógł sprawdzić dopiero za jakieś 2 tygodnie. Jeżeli temat będzie Cię nadal interesował pisz.

A więc:

AVRdude działa bez problemów, nakładka Burn.... także. Trzeba tylko ementualnie wyłączyć certyfikaty sterowników, żeby moły działać programatory.

Przy WinAVR problemy byłu, Poczytałem tu i ówdzie, pociągałem co nieco. I działa......

Jest tam jakaś biblioteka, którą gdzieś tam trzeba podłączyć.

Przepraszam za błędy i styl pisania, a mija mi 3 nieprzespana noc 🙁

Pozdrawiam

Przemek

Większość programów z XP uruchomisz na Win 7 (nawet x64), wystarczy we właściwościach wybrać tryb zgodności z XP SP2. WinAVR mi śmiga (choć wersja systemu x86) 😉

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...