f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Szukaj

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload
Znalezionych wyników: 12
And-Tech Strona Główna
Autor Wiadomość
  Temat: ADC - brak danych w pełnym zakresie potencjometru
Pawlo

Odpowiedzi: 5
Wyświetleń: 6136

PostForum: Nauka programowania   Wysłany: Sob Maj 10, 2014 4:20 pm   Temat: ADC - brak danych w pełnym zakresie potencjometru
Po bojach i walkach i braku podpowiedzi doszedłem do rozwiązania :grin:

Otóż rozwiązanie tego problemu był "proste". W oryginalnym kodzie na porcie A działał wyświetlacz LCD (7 pinów) i na jednym (ostatnim wolnym) pinie było zadeklarowane odczyt ADC. Testując, przełożyłem obsługę wyświetlacza na inny port. Teraz działa prawidłowo :grin:

Moje wytłumaczenie jest takie, że w programie miałem zadeklarowany cały port jako wyjścia.
Kod:
    DDRA = 0xFF; //dotyczy portu A na którym siedzi wyświetlacz

Zakładam, że wystarczyło wprowadzić prawidłową wartość (szesnastkową w powyższym kodzie) aby pin, na którym jest pomiar ustawić jako wejście. Swoją drogą jest to (dla mnie) dziwne, że nawet przy błędnym ustawieniu portu pojawiały się jakieś wskazania :!: .
  Temat: ADC - brak danych w pełnym zakresie potencjometru
Pawlo

Odpowiedzi: 5
Wyświetleń: 6136

PostForum: Nauka programowania   Wysłany: Sob Maj 03, 2014 10:06 am   Temat: ADC - brak danych w pełnym zakresie potencjometru
Nie ma problemu
Kod:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <util/delay.h>

#include "MYUART/myuart.h"
#include "MYLCD/mylcd.h"

uint16_t pomiar (uint8_t kanal);

#define REF_256 (1<<REFS1)|(1<<REFS0)
#define REF_VCC (1<<REFS1)|(0<<REFS0)
#define REF_5V (0<<REFS1)|(1<<REFS0);//ustawiam napięcie odniesienia na AVCC (napięcie zasilania układu ~5V)

#define LED (1<<PC1)
#define LED_ON PORTC |= LED
#define LED_OFF PORTC &= ~LED
#define LED_TOG PORTC ^= LED
#define LED1 (1<<PC0)
#define LED1_ON PORTC |= LED1
#define LED1_OFF PORTC &= ~LED1
#define LED1_TOG PORTC ^= LED1

int main(void){

    DDRC |= LED;
    DDRC |= LED1;

    //inicjalizacja ADC

    //ADCSRA |= (0<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);    //preskaler = 4
    //ADCSRA |= (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);    //preskaler = 8
    //ADCSRA |= (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);    //preskaler = 16
    //ADCSRA |= (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);    //preskaler = 32
    ADCSRA |= (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);//ustawienie prescalera na 128 = częstotliwość taktowania 125kHz

    ADMUX |= REF_5V;    //ustawiamy wewn. żródlo odniesienia
    ADCSRA |= (1<<ADEN);    //włączenie ADC

    USART_Init(__UBRR);

    DDRA = 0xFF; //dotyczy portu A na którym siedzi wyswielacz

    char buf[50];

    uint16_t WynikADC=0;

    int czas = 400;

    lcd_init();         //inicjalizacja LCD
    lcd_xy(0,0);
    write_text("z ADC:");
    lcd_xy(1,0);
    write_text("z RS232:");

    while (1){

        WynikADC = pomiar ( PA1 );

        sprintf(buf,"%04d",WynikADC);//konwertuję go na ciąg znaków i dopisuję zera
        lcd_xy(0,9);
        write_text(buf);

        LED_TOG;

        uart0_putlong (WynikADC, 10);

        _delay_ms(czas);
    }
}

uint16_t pomiar (uint8_t kanal)
{
    ADMUX |= (ADMUX & 0b11111000) | kanal;
    ADCSRA |= (1 << ADSC);    // start konwersji

    while (ADCSRA & (1 << ADSC) );

    return ADC;    //ADCW - funkcja pozwalająca na odczyt dwóch bitów z danymi (odpowiednio przekonwertuje  pozrzucane bity)
}


Mam nadzieję że coś wykryjesz :wink:
  Temat: ADC - brak danych w pełnym zakresie potencjometru
Pawlo

Odpowiedzi: 5
Wyświetleń: 6136

PostForum: Nauka programowania   Wysłany: Nie Kwi 27, 2014 2:30 pm   Temat: ADC - brak danych w pełnym zakresie potencjometru
Znacznie lepiej wyglądają te nowe programy - dla mnie zdecydowanie bardziej przyswajalne :wink:
Jednak do rzeczy.
Przeanalizowałem przykładowy kod i swój, i nie bardzo widzę co może być źle. Zmieniłem cześć kodu odnoszącą się do Vref
Kod:
ADMUX |= (1<<REFS0);//ustawiam napięcie odniesienia na AVCC (napięcie zasilania układu ~5V)

jednak nie widzę różnicy w działaniu. Wg noty technicznej powinienem połączyć AVCC z Aref przez kondensator
Cytat:
AVCC with external capacitor at AREF pin
Czy tak to ma być :?: W dokumencie do przykładowych projektów nic nie jest wspomniane na ten temat. Jeżeli tak to jaka pojemność kondensatora :?:
Chyba że nie tędy droga :?:

Zauważyłem przez przypadek, że po maksymalnym rozkręceniu potencjometru wartość którą dostaję to ok 839 i jeżeli nie zmieniam ustawień, to wartość ta samoczynnie rośnie. nie wiem do ilu jest w stanie urosnąć, ale ja doszedłem do ponad 900. Może to coś pomoże w rozwiązaniu :wink:
  Temat: ADC - brak danych w pełnym zakresie potencjometru
Pawlo

Odpowiedzi: 5
Wyświetleń: 6136

PostForum: Nauka programowania   Wysłany: Pon Kwi 21, 2014 8:27 pm   Temat: ADC - brak danych w pełnym zakresie potencjometru
Mam mały problem z ADC. Mianowicie nie działa mi do końca ADC tak jakbym chciał. Nie bardzo też potrafię wytłumaczyć sam przed sobą dlaczego tak właśnie jest.
Otóż otrzymuję wartości od 0 - 1023 jednak nie w pełnym zakresie potencjometru. Kręcąc potencjometrem od 0 w kierunku MAX dopiero (mniej więcej) w połowie zakresu potencjometru zaczynają pojawiać się wartości. Tłumaczę to sobie (nieudolnie) napięciem ref 2.56V (w przybliżeniu połową 5V).
Przeglądając (testując program) przykład dostarczony z płytką ADC_PWM widać że w całym zakresie potencjometru jest reakcja "diody". Niestety, ale programy przykładowe do płytki nie do końca są dla mnie zjadliwe.
Oczywiście płytka jest "niezmienna sprzętowo" :smile:
Czy ktoś może na podstawie załączonego kodu coś podpowiedzieć :?:

Kod:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <util/delay.h>

#include "MYUART/myuart.h"

uint16_t pomiar (uint8_t kanal);

#define REF_256 (1<<REFS1)|(1<<REFS0)
#define REF_VCC (1<<REFS1)|(0<<REFS0)

int main(void){

    //inicjalizacja ADC
    ADCSRA |= (1<<ADEN);    //włączenie ADC
    ADCSRA |= (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);    //preskaler = 32

    ADMUX |= REF_256;    //ustawiamy wewn. żródlo odniesienia 2,56V

        USART_Init(__UBRR);

    uint16_t WynikADC=0;

    int czas = 400;

    while (1){


        WynikADC = pomiar ( PA1 );

        uart0_putlong (WynikADC, 10);

           _delay_ms(czas);
    }

uint16_t pomiar (uint8_t kanal)
{
    ADMUX |= (ADMUX & 0b11111000) | kanal;
    ADCSRA |= (1 << ADSC);    // start konwersji

    while (ADCSRA & (1 << ADSC) );

    return ADCW;    //ADCW - funkcja pozwalająca na odczyt dwóch bitów z danymi (odpowiednio przekonwertuje pozrzucane bity)
}


P.S.
Starałem się pousuwać z programu to co nie istotne w przedstawionym problemie. Mogłem coś usunąć z rozpędu - program tak czy siak działa.
  Temat: USART - krzaki na wyjściu
Pawlo

Odpowiedzi: 14
Wyświetleń: 17620

PostForum: Nauka programowania   Wysłany: Pon Lut 17, 2014 9:06 pm   Temat: USART - krzaki na wyjściu
Postawiłem MAX232. No i teraz jest ładnie.

Potwierdzam, że można sygnał rozdzielić przynajmniej Tx na więcej portów - coś w rodzaju podsłuchu co się dzieje na linii. Nie próbowałbym jednak Rx, bo to pewnie uszkodzić procek :wink:
Dzięki za pomoc i do następnego wątku.
  Temat: USART - krzaki na wyjściu
Pawlo

Odpowiedzi: 14
Wyświetleń: 17620

PostForum: Nauka programowania   Wysłany: Pon Lut 17, 2014 6:05 pm   Temat: USART - krzaki na wyjściu
Zrobiłem jeszcze test wszystkiego co montuję pomiędzy portem USB a uC (konwerter USB<>RS232, kabele własnej produkcji). Próba ECHA na loopbacku przechodzi bez zająknięcia.
Sprawdziłem również Piny TX,RX USART1 (PD2, PD3) czy nie są przypadkiem do czegoś podłączone jak to ma miejsce dla USART0 (PD0, PD1) - USART1 jest "czysty".
  Temat: USART - krzaki na wyjściu
Pawlo

Odpowiedzi: 14
Wyświetleń: 17620

PostForum: Nauka programowania   Wysłany: Nie Lut 16, 2014 9:08 pm   Temat: USART - krzaki na wyjściu
piotr94 napisał/a:
Pokaż jaką masz tą przejściówkę, bo jeśli to USB <> RS232 (wtyk DB9) to spore szanse, że uszkodziłeś takim połączeniem procesor...
O rzetelności tej informacji wolę się nie wypowiadać...

Dokładnie tak jak napisałeś to USB <> RS232. W poprzednim wpisie podałem zły link. Podaję prawidłowy https://www.youtube.com/w...63B4626A2145EC. Chodzi o 11:55 minutę.

Nie spodziewałbym się tutaj raczej uszkodzenia procesora. Pomimo moich działań COM wirtualny bardzo ładnie odbiera (chart, string - jak leci)

Przejściówka to Profilic USB-to-Serial Comm Port.

Zastanawiam się bardziej czy problem nie leży po stronie połączenia pinu TX z pinem RX w przejściówce. Ja podłączyłem bezpośrednio TX do RX. Natomiast znalazłem schematy takowych połączeń które pokazują że po stronie wtyczki piny 1,6,4 jak również 8,7 powinny być ze sobą zwarte.
http://hobby.abxyz.bplace...08_schemat2.png
Są oczywiście też takie na których to połączenie jest wykonane tak ja ja to zrealizowałem.

czy ewentualnie jakieś inne sugestie poza uszkodzeniem? :neutral:
  Temat: USART - krzaki na wyjściu
Pawlo

Odpowiedzi: 14
Wyświetleń: 17620

PostForum: Nauka programowania   Wysłany: Sob Lut 15, 2014 9:49 pm   Temat: USART - krzaki na wyjściu
To pytanie ma po testach które wykonałem. Wysyłam na USART0 na zmianę a i b. Korzystając z wirtualnego COM dostaję to co ma być.
"Rozdzielając" sygnał na dwa porty zakładałem, że dostanę na obu to samo. Okazuje się, że na porcie dodatkowym dostaję O na zmianę z '. Na wirtualnym cały czas jest OK. Podejrzewałem że "rozdzielenie" ma zły wpływ.

Po zmianie w programie na USART1 (czyli w zasadzie zmiana wpisów z 0 na 1) dostaję na dodatkowym porcie O i '.

Realizuję tylko i wyłącznie wysyłanie. Nie powinno tu być konfliktów.
Dodatkowy port w komputerze zrealizowany jest na przejściówce USB na rs232. Po stronie uC nie mam MAX 232, tylko bezpośrednio wrzucam to na port. Z tego co przedstawia mirekk36 na swoim kurcie o ADC (http://www.youtube.com/watch?v=JbLHXkFZwsE) nie ma sensu stosować układu max232 gdyż sygnał USB ma 5V (brak niezgodności napięć).

jakieś sugestie?
  Temat: USART - krzaki na wyjściu
Pawlo

Odpowiedzi: 14
Wyświetleń: 17620

PostForum: Nauka programowania   Wysłany: Sob Lut 15, 2014 11:54 am   Temat: USART - krzaki na wyjściu
piotr94 napisał/a:
Tak, USB jest widziane jako wirtualny port COM i normalnie procujemy z nim po prostu podłączając kabel USB (bo układ ft232rl jest już połączony z procesorem na stałe).

Trochę odświeżę wątek. Na płytce, przynajmniej tej która mam, jest układ MAX 485. Chcąc z niego korzystać mogę rzucić go na drugą linię USART1, ale jak się uprę żeby podłączyć go do USART0 to czy mogę to zrobić po prostu "rozdzielając" TX/RX?
Wiem, że komunizacja po rs232 jest do jednego, jednak nie wykorzystywałbym ft232 do komunikacji w tym wypadku.
Czy takie rozwiązanie jest w ogóle możliwe?
  Temat: Jak procek odmierza czas?
Pawlo

Odpowiedzi: 6
Wyświetleń: 5113

PostForum: Nauka programowania   Wysłany: Czw Lut 13, 2014 9:24 pm   Temat: Jak procek odmierza czas?
piotr94 napisał/a:
Bo tak się składa, że domyślnie zestaw EvB ustawiony jest na 16MHz...


Wygląda na to że problem rozwiązany. Dioda miga z określoną częstotliwością. Muszę jeszcze sprawdzić jak teraz działa mi wysyłanie danych przez USART.

Nie wiem czemu zasugerowałem się, że częstotliwość jest domyślnie ustawiona na 1MHz. Informacja że jest to 16 MHz jest trafna. Wystarczyło zmienić w opcjach projektu F_CPU na prawidłowe.
Dzięki za podpowiedź.
  Temat: Jak procek odmierza czas?
Pawlo

Odpowiedzi: 6
Wyświetleń: 5113

PostForum: Nauka programowania   Wysłany: Sob Lut 08, 2014 3:05 pm   Temat: Jak procek odmierza czas?
Programuje pod Eclipsem. Tam mam ustawione na 1M.
Niezaleznie od tego, działając na ustawieniach z jakimi został zakupiony EvB zakładam że powinno być dobrze.
Co sugerujesz jezeli chodzi o Fusbity? Czy jest jakaś zalezność pomiedzy nimi. Częstotliwością taktowania?
Sorki jezeli pytam o oczywistości, ale kiedyś trzeba :-)
  Temat: Jak procek odmierza czas?
Pawlo

Odpowiedzi: 6
Wyświetleń: 5113

PostForum: Nauka programowania   Wysłany: Pią Lut 07, 2014 9:06 pm   Temat: Jak procek odmierza czas?
Mam takie proste pytanie związane z "odmierzaniem czasu przez uC. Chodzi mi o stworzenie najprostszego programu jaki swoje działanie uzależnia od czasu a mianowicie miganie diody z określoną częstotliwością. Niestety w moim programie dioda zasuwa zdecydowanie z częstotliwością większą niż określona w programie. Poniżej "kodzik":
Kod:
#include <avr/io.h>
#include <avr/delay.h>

#define LED (1<<PC1)
#define LED_ON PORTC |= LED
#define LED_OFF PORTC &= ~LED
#define LED_TOG PORTC ^= LED

int main(void){

    DDRC |= LED;

    int czas = 1000;

    while (1){
        LED_TOG;
        _delay_ms(czas);
    }
}

Nie bardzo wiem w czym tkwi problem. Jeżeli ktoś mógłby pomóc to będę wdzięczny.

Całe zagadnienie jest częścią większego problemu. Powyżej przedstawiłem kąsek kodu mający zobrazować problem, który wystąpił u mnie przy transmisji danych przez UART. Transmisja idzie z dużo większymi prędkościami niż to co jest ustalone. Zmieniając prędkość transmisji po stronie odbiornika (terminala) uzyskuję na rożnych prędkościach rożne krzaczki. Wydaje się to być logiczne gdyż "odbiorniki" wstrzeliwuje się w ciąg wysyłanych prze procek znaków i inaczej je interpretuje. Muszę zapanować nad czasem wysyłania tych znaków.
Zakładam że jak okiełznam problem z diodą to problem z UARTem się rozwiąże.
Czekam na sugestie :)
 
Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group