termometr LM35 atmega8

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!
ODPOWIEDZ
miery
-
Posty: 3
Rejestracja: 09 cze 2011, 1:01
Lokalizacja: Bydgoszcz

termometr LM35 atmega8

Post autor: miery » 09 cze 2011, 18:31

Witam,
Chciałbym zrobić coś takiego(patrz obrazek), ale nie wiem od czego zacząć pisanie kodu. Nigdy nie programowałem mikrokontrolera :oops: . Szukałem w necie jakiegoś w miarę przystępnego przykładu, ale coś nie poszło.

Dlatego, znacie może jakiś dobry tutorial albo coś w ten deseń.

Obrazek

Pozdrawiam.

Awatar użytkownika
tom5555
Użytkownik
Posty: 625
Rejestracja: 23 sty 2008, 1:20
Lokalizacja: Zabrze
Kontakt:

Post autor: tom5555 » 09 cze 2011, 19:02

Obsługa przetwornika A/D i wyświetlacza LCD. Nie podałeś w jakim języku chcesz programować procesor.

miery
-
Posty: 3
Rejestracja: 09 cze 2011, 1:01
Lokalizacja: Bydgoszcz

Post autor: miery » 09 cze 2011, 19:02

C++

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 09 cze 2011, 20:44

A programowales cokolwiek? Na mikrokontrolery pisze sie raczej w C a nie w C++. Zalatw sobie zestaw uruchomieniowy np. do AVR-ow i po prostu pocwicz. Na poczatek musisz doprowadzic do komunikacji miedzy programatorem a mikrokontrolerem, potem sprobuj napisac prosty program ktory bedzie mrugal LED-em. Potem przejsc do obslugi wyswietlacza LCD, i tak dalej. Jak nic nie robiles z takich rzeczy to bedzie duga droga przez zbudowaniem i zaprogramowaniem czegos takiego jak masz na obrazku.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 09 cze 2011, 21:04

Był jakiś kurs poświęcony C w EdW, nie pamiętam dokładnie kiedy. Można go chyba kupić na płytce.
miery pisze:nie wiem od czego zacząć pisanie kodu
Od migania diodą LED. Serio. Prosta sprawa, a przetestujesz środowisko, programator, mikrokontroler, etc. Potem podłącz kilka diod LED i pomigaj nimi, zrób jakiś prosty efekt. Dopiero wtedy proponuję iść dalej.
Może warto zainwestować w jakiś zestaw uruchomieniowy? Nie będziesz się zastanawiał, czy coś nie działa ze sprzętowego powodu, czy po prostu w programie jest błąd.
No i jeżeli kompletnie nie masz pojęcia o mikrokontrolerach, to zapomnij, że w jeden wieczór to zrozumiesz. Nie zrozum mnie źle, po prostu daj sobie więcej czasu na spokojne zapoznanie się z tym tematem i EKSPERYMENTY. Zrób coś prostego, a dopiero potem powoli idź dalej. Moim zdaniem obsługa wyświetlacza jest zbyt trudna jak na pierwszy projekt, więc polecam LEDy.
Jak zaczynałem zabawę z prockami szarpnąłem się na elektroniczną kostkę do gry opublikowaną w EdW z poczciwym 89c2051 na pokładzie, ale niestety nie wyszło. Zrobiłem sobie układzik z diodami, pobawiłem się, zadziałało, pocieszyłem się tym i wróciłem do kostki. Wtedy już dałem radę :wink:

[ Dodano: 2011-06-09, 22:06 ]
O, kolega wyżej mnie uprzedził ;)
A programowales cokolwiek? Na mikrokontrolery pisze sie raczej w C a nie w C++.
W przypadku AVRów można pisać w C++, przynajmniej na poziomie tworzenia i wykorzystania klas. Robiłem to wielokrotnie, kiedyś testowałem bardziej zaawansowane zagadnienia jak polifonia/dziedziczenie, ale pamięci szło, że hej ;)

miery
-
Posty: 3
Rejestracja: 09 cze 2011, 1:01
Lokalizacja: Bydgoszcz

Post autor: miery » 11 cze 2011, 13:10

Witam,
Programuję w C(++ #) i JAVIE.
Ogólnie nie ogarniam jak te piny poustawiać żeby LCD 4x20 obsłużyć.

Układ polutowałem i śmiga, tylko swój wsad chciałbym napisać.

Coś już śmiga, ale jak widać
1) ADC nie działa dobrze.

Kod: Zaznacz cały

 float pomiar;
  char temp[4];
 
  ADMUX |= (1 << MUX0); 
  ADMUX |= (1 << MUX2); 

  ADMUX |= (1 << REFS0); 
  ADMUX &= ~(1 << REFS1);

  ADCSRA |= (1 << ADPS0);
  ADCSRA |= (1 << ADPS1);

  ADCSRA |= (1 <<ADEN);

  while(1)
  {

    ADCSRA |= (1 << ADSC);
    while(bit_is_set(ADCSRA, ADSC))
    {};
 
    pomiar = ADCW;
    pomiar *= 0.0049; // bity na volty
    pomiar *= 100; // volty na kelwiny
    pomiar -= 273; // kelwiny na celsjusze 
	
	dtostrf(pomiar, 5, 2, temp); 
AREF i AVCC zwarte i do GND(czy napewno?)
sygnał z LM35 do PC0

2) Chciałbym żeby kreski były w miejscu tych czerwonych(jak na oryginale). Wiecie jak to zrobić?
Załączniki
IMG_20110612_022604.jpg

piotreks89
-
Posty: 26
Rejestracja: 16 gru 2010, 8:55
Lokalizacja: Olesno
Kontakt:

Post autor: piotreks89 » 14 cze 2011, 17:53

Najprościej będzie zdefiniować własny znak, który podzieli ci jedno pole na połowę, taką kreskę. Nie programuję w C, więc nie wiem jak to jest w tym języku. Chyba istnieją jakieś kalkulatory do tego. Kiedyś widziałem taki poradnik na wkretak.pl, lecz ta strona już nie istnieje.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 14 cze 2011, 18:09

W miejscu gdzie są czerwone kreski się nie da. Jest to wyświetlacz alfanumeryczny więc nie można wyświetlić nic w obszarze innym niż obszar dla znaku (pomiędzy znakami). Na wyświetlaczu graficznym dało by się coś takiego zrobić. Rozwiązaniem może być zdefiniowanie znaku pionowej kreski na krawędzi obszaru dla znaku. Przesłanie zdefiniowanego znaku do pamięci wyświetlacza i wyświetlanie gdy jest potrzeba. Nie wiem jak robi się coś takiego w C (zależy pewnie od użytej biblioteki do obsługi alfanumerycznego LCD). W Baskom AVR jest stosowne narzędzie w menu: Tools-->LCD Designer.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 14 cze 2011, 18:26

W miejscu gdzie są czerwone kreski się nie da
To chyba nie słyszałeś o generatorze znaków i możliwości zdefiniowania własnych symboli ;). Da się. W dokumentacji sterownika (HD44780) jest polecenie do zapisywania własnych znaków w pamięci RAM LCDka. Potem odnosisz się do nich zapisując wartości w zakresie od 0 do 7 w trybie zapisu danych.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 14 cze 2011, 18:51

Co do pierwszego pliku graficznego w tym temacie to dwa znaki są jak najbardziej definiowane (o czym napisałem) (o ile nie występują w tablicy wyświetlacza) ale są wyświetlane w obszarze dla znaku. W drugim załączniku czerwone kreski są narysowane pomiędzy obszarami przeznaczonymi dla znaku a tam się nie da nic wyświetlić.

maxzwp
-
Posty: 36
Rejestracja: 31 sty 2006, 15:13

Post autor: maxzwp » 14 cze 2011, 21:29

miery pisze:AREF i AVCC zwarte i do GND(czy napewno?)
Generalnie:
- AVCC powinno być podłączone do VCC.
- AREF powinno wisieć w powietrzu albo być podłączone do zewnętrznego źródła napięcia odniesienia, pewnie może być AVCC ale sprawdź w dokumentacji.

Ponadto powinieneś podłączyć też kondensatory filtrujące pomiędzy AREF i GND oraz AVCC i GND oraz filtrować napięcie dla AVCC (filtr RC lub LC).

Poczytaj o ADC w datasheet. Jest to tam ładnie opisane.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 14 cze 2011, 22:27

c4v2 pisze:W drugim załączniku czerwone kreski są narysowane pomiędzy obszarami przeznaczonymi dla znaku a tam się nie da nic wyświetlić.
Zwracam honor, nie zauważyłem tego :oops: Niemniej można zdefiniować sobie dwa znaki, die poziome kreski, jedna skrajnie z prawej, druga skrajnie z lewej i przerwę między znakami wziąć między te kreski. Efekt będzie mniej więcej taki:

Kod: Zaznacz cały

  | |     | |     | |     | |     | |     

ODPOWIEDZ