Skocz do zawartości

kuba3d6

Użytkownicy
  • Zawartość

    13
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O kuba3d6

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  1. na tym schemacie tego nie ma bo to tylko wycinek, ale mam RC zaraz za wyjściem PWM z uC.
  2. chce użyć wzmacniacza, bo wiem mniej więcej jak go użyć, nie wiem czy to ma jakieś znaczenie, ale PWM ma działać na zasadzie przetwornika C/A, tak żebym na wyjściu mógł sterować napięciem 0-10V, a ponieważ wyjście z uC, ma zakres tylko do 5V, to myślałem że wzmacniaczem będzie najprościej go poszerzyć do 10. w układzie nie ma RS232 . nie do końca rozumiem zasadę działania tych transoptorów, ale zmajstrowałem taki układ opierający się na transoptorze CNY17 : teraz moje pytanie, czy to jest w ogóle poprawne, bo rozumiem, że tam gdzie teraz mam +5V , dam ten mój PWM i on będzie mi sterował jasnością świecenia diody, która będzie miał wpływ na napięcie po stronie tranzystora. tylko gdzie w takim przypadku będę miał mój sygnał 0-10V pytania pewnie banalne, ale nie potrafię tego ogarnąć na podstawie tego co piszą w internecie. jakby ktoś był tak miły i mi wytłumaczył jak dokładnie ten transoptor działa to byłbym bardzo wdzięczny edit. edytowałem schemat, czy tak będzie w porządku ?
  3. a jeżeli na pin 7 zamiast +5V, dałbym +12V, a sygnał z PWM byłby 0-5V, to na wyjściu miałbym te 0-10V ?
  4. Witam, po raz kolejny potrzebuję pomocy. Powiedzcie mi czy stosując taki schemat podłączenia jak na obrazku, sterując sygnałem PWM w zakresie 0-5V, na wyjściu wzmacniacza uzyskam sygnał 0-10V, oraz czy wyprowadzenia offset null, mogą zostać nie podłączone ? Do czego one w ogóle służą ? Dziękuję za każdą pomoc . Pozdrawiam
  5. okej, spróbuje coś pokombinować, chociaż to co teraz uzyskałem już mnie satysfakcjonuje.
  6. działa, dzięki wielkie za pomoc, od dwóch dni nad tym siedziałem ... jeszcze raz wielkie dzięki
  7. zrobiłem tak jak napisałeś i wszystko działa więc co , zbyt skomplikowane działania, liczby mają za dużo miejsc po przecinkach ?
  8. to może po prostu atmega8 jest za słaba na takie obliczenia bo już innego pomysłu nie mam
  9. a masz coś podpięte pod wejście przetwornika a/c ? w mnie wszystko działa normalnie do czasu aż dodam w programie te ify, więc to chyba musi być ich wina.
  10. okej wstawiam cały kod, wykorzystałem już istniejący z bloga gdzie było pokazana jak wykorzystać adc, trochę go przerobiłem na swoje potrzeby : //Pomiar napięcia przetwornikiem A/C i prezentacja wyniku na LCD 2x16 HD44780 #include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <avr/interrupt.h> #include "HD44780.h" //definicja napiecia referencyjnego #define VREF 5.05 //definicja ADCIN (wejście ADC) #define ADCIN PC5 volatile double adc;//zmienna do obliczeń napięcia volatile double F; volatile double R; int main(void) { char wynik[]=" ";//bufor tekstowy, wyczyszczenie bufora char sila[]=" "; LCD_Initalize(); //inicjalizacja LCD //Inicjalizacja ADC ADCSRA = (1<<ADEN) //włączenie ADC |(1<<ADFR) //włączenie trybu Free run |(1<<ADIE) //uruchomienie zgłaszania przerwań |(1<<ADSC) //rozpoczęcie konwersji |(1<<ADPS0) //ADPS2:0: ustawienie preskalera na 128 |(1<<ADPS1) |(1<<ADPS2); ADMUX = (1<<REFS0) //VCC jako napięcie referencyjne |(1<<MUX2) | (1<<MUX0); //wybór kanału pomiarowego ADC5 DDRC &=~ (1<<ADCIN); //ustawienie wejścia ADC sei(); //Globalne uruchomienie przerwań while(1) { sprintf(wynik,"R=%1.3f [kOm]",R); //konwersja na łańcuch znakowy LCD_GoTo(0, 0); //Ustawienie kursora w pozycji (1,1) LCD_WriteText(wynik); //Wyświetlenie wyniku sprintf(sila,"F=%1.3f [g]",F); //konwersja na łańcuch znakowy LCD_GoTo(0, 1); //Ustawienie kursora w pozycji (1,1) LCD_WriteText(sila); _delay_ms(500); //opóźnienie LCD_Clear(); } } ISR(ADC_vect)//obsługa przerwania po zakończeniu konwersji ADC { adc=ADC*VREF/1024; //przeliczenie wartości na napięcie R=((VREF*10-adc*10)/adc); F=((-0.043)*R)+21.3; if(R>=20) F=((-0.043)*R)+21.3; if(R<20 && R>=10) F=((-1.5)*R)+64.78; if(R<10) F=((-12.5)*R)+175; }
  11. R na pewno nigdy nie przyjmuje wartości zera, bo im mniejszy nacisk tym większe R. Bez elsów, samymi ifami również próbowałem, ale niczego to nie zmienia. Teraz tak się zastanawiam, może wychodzą za duże liczby po przecinku, a atmega nie jest w stanie ich przetworzyć. Czasami zdarza się tak że przez chwilę wszystko działa okej a dopiero później następuje zwieszenie, więc mój drugi pomysł to może jakiś bufor się zapycha czy coś. Nie wiem nie znam się na uC , to mój pierwszy projekt i nie mogę tego ogarnąć .
  12. rozumiem że mógłbym wykraczać po za zakres, ale R ( liczone bez względu na zakres) które bez tych ifów wyświetla się normalnie po dodaniu ich również przestaje się wyświetlać. stąd moja myśl że coś się zwiesza, no ale spróbuje z tym elsem jeszcze. edit. sprawdziłem i ten else na końcu niczego nie zmienia .
  13. Witam wszystkich, to mój pierwszy post na forum. Mam pewien problem, mój zestaw to atmega8 + czujnik nacisku + wyświetlacz. Chciałbym go zaprogramować tak, aby na wyświetlaczy pokazywała się siła nacisku, czujnik ma wyjście rezystancyjne, korzystając z charakterystyki wyznaczyłem wzory opisujące siłę, dla trzech interesujących mnie przedziałów rezystancji. Zaznaczam od razu że pomiar rezystancji i jej wyświetlanie na wyświetlaczu działa poprawnie. Problem pojawia się, gdy chcę przekształcić rezystancję w siłę, korzystając z wyznaczonych wzorów. Fragment kodu: R=((VREF*10-adc*10)/adc); if(R>=20) F=((-0.043)*R)+21.3; else if(R<20 && R>=10) F=((-1.5)*R)+64.78; else if(R<10) F=((-12.5)*R)+175; Atmega zawiesza się , lub przestaje działać w momencie dodania tego kodu, tzn. na wyświetlaczu nie chcą się wyświetlać żadne wartości, cały czas są same zera, bez ifów samo R jest obliczane i wyświetlane prawidłowo, więc podejrzewam że problem jest z ifami, tylko nie wiem o co może chodzić. Może ktoś ma jakiś pomysł . Pozdrawiam
×
×
  • Utwórz nowe...