Skocz do zawartości

Pixelx

Użytkownicy
  • Zawartość

    21
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O Pixelx

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Dziękuję bardzo za pomoc. Jak będę miał możliwość zaraz to przetestuję Podsumowując przerwanie wygląda tak: ISR(TIMER0_COMP_vect){ static uint8_t anoda = 1, licznik; licznik ^= 1; if (licznik) { OCR0=2; // wygaszenie wszystkich wyświetlaczy; ANODY_PORT = (ANODY_PORT | MASKA_ANODY); NIXIE_DATA = 0xFF; } else { // cykliczne przełączanie kolejnej anody OCR0=10; ANODY_PORT = (ANODY_PORT & ~MASKA_ANODY) | (anoda & MASKA_ANODY); switch (anoda) { case 1: NIXIE_DATA = pgm_read_byte( &cyfry[godzina1] ); break; case 2: NIXIE_DATA = pgm_read_byte( &cyfry[godzina2] ); break; case 4: NIXIE_DATA = pgm_read_byte( &cyfry[minuta1] ); break; case 8: NIXIE_DATA = pgm_read_byte( &cyfry[minuta2] ); break; case 16: NIXIE_DATA = pgm_read_byte( &cyfry[sekunda1] ); break; case 32: NIXIE_DATA = pgm_read_byte( &cyfry[sekunda2] ); break; default: NIXIE_DATA = 0xFF; break; } anoda <<= 1; } if (anoda > 32) { anoda = 1; } }
  2. Dodałem do projektu tą przeróbkę i kompiluje się wszystko. Nie mogę na razie powiedzieć czy to działa bo jestem poza domem już i to tak na 2 tyg. Pytanie czy częstotliwość będzie dobra? Czy powinna być wyższa? Bo wtedy trzeba by zmienić rejestr porównania OCRx
  3. Do programu przygotowałem sobie bibliotekę więc przedstawię te pliki. Częstotliwość to tak gdzieś 360Hz? Mam 6 lamp 8Mhz taktowanie uC na wewnętrznym rezonatorze RC. W takiej kolejności są kody przedstawione. main.c nixie.c nixie.h #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "NIXIE/nixie.h" #include "I2C_TWI/i2c_twi.h" #define DS3231_ADDR 0xD0 uint8_t bcd2dec(uint8_t bcd); uint8_t dec2bcd(uint8_t dec); void DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss ); void DS3231_init(); int main(void) { nixie_init(); DS3231_init(); PORTD |= (1<<PD2); // konfiguracja wejścia INT0 MCUCR |= (1<<ISC01)|(1<<ISC00); // zbocze narastające //DS3231_set_time( 13,52,30 ); i2cSetBitrate(100); enum {ss, mm, hh}; enum {cel, fract }; uint8_t bufor[3]; uint8_t sekundy, minuty, godziny; uint8_t sekundy_ob1, sekundy_ob2, minuty_ob1, minuty_ob2, godziny_ob1, godziny_ob2; //sekunda1=3; sei(); while(1) { if( GIFR & (1<<INTF0) ) { TWI_read_buf( DS3231_ADDR, 0x00, 3, bufor ); godziny = bcd2dec( bufor[hh] ); minuty = bcd2dec( bufor[mm] ); sekundy = bcd2dec( bufor[ss] ); godziny_ob1 = godziny / 10; godziny_ob2 = godziny % 10; minuty_ob1 = minuty / 10; minuty_ob2 = minuty % 10; sekundy_ob1 = sekundy / 10; sekundy_ob2 = sekundy % 10; godzina1 = godziny_ob1; godzina2 = godziny_ob2; minuta1 = minuty_ob1; minuta2 = minuty_ob2; sekunda1 = sekundy_ob1; sekunda2 = sekundy_ob2; GIFR |= (1<<INTF0); } } } void DS3231_init( void ){ uint8_t ctrl = 0; TWI_write_buf( DS3231_ADDR, 0x0e, 1, &ctrl ); } void DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss ) { uint8_t buf[3]; buf[0]=dec2bcd(ss); buf[1]=dec2bcd(mm); buf[2]=dec2bcd(hh); TWI_write_buf( DS3231_ADDR, 0x00, 3, buf ); } // konwersja liczby dziesiętnej na BCD uint8_t dec2bcd(uint8_t dec){ return ((dec / 10)<<4) | (dec % 10); } // konwersja liczby BCD na dziesiętną uint8_t bcd2dec(uint8_t bcd){ return ((((bcd) >> 4) & 0x0F) * 10) + ((bcd) & 0x0F); } #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include "nixie.h" volatile uint8_t godzina1; volatile uint8_t godzina2; volatile uint8_t minuta1; volatile uint8_t minuta2; volatile uint8_t sekunda1; volatile uint8_t sekunda2; const uint8_t cyfry[10] PROGMEM = { ~(A0|A1|A2|A3), //0 (A0), //1 (A1), //2 (A0|A1), //3 (A2), //4 (A0|A2), //5 (A1|A2), //6 (A0|A1|A2), //7 (A3), //8 (A0|A3) //9 }; void nixie_init(void){ NIXIE_DATA_DIR = 0xFF; NIXIE_DATA = 0xFF; ANODY_DIR |= ANODA1 | ANODA2 | ANODA3 | ANODA4 | ANODA5 | ANODA6; ANODY_PORT |= ANODA1 | ANODA2 | ANODA3 | ANODA4 |ANODA5 | ANODA6; TCCR0 |= (1<<WGM01); // tryb CTC TCCR0 |= (1<<CS02)|(1<<CS00); // preskaler 1024 OCR0 = 22; TIMSK |= (1<<OCIE0); } ISR(TIMER0_COMP_vect){ static uint8_t licznik=1; ANODY_PORT = (ANODY_PORT | MASKA_ANODY); // wygaszenie wszystkich wyświetlaczy; if(licznik==1) NIXIE_DATA = pgm_read_byte( &cyfry[godzina1] ); else if(licznik==2) NIXIE_DATA = pgm_read_byte( &cyfry[godzina2] ); else if(licznik==4) NIXIE_DATA = pgm_read_byte( &cyfry[minuta1] ); else if(licznik==8) NIXIE_DATA = pgm_read_byte( &cyfry[minuta2] ); else if(licznik==16) NIXIE_DATA = pgm_read_byte( &cyfry[sekunda1] ); else if(licznik==32) NIXIE_DATA = pgm_read_byte( &cyfry[sekunda2] ); ANODY_PORT = (ANODY_PORT & ~MASKA_ANODY) | (licznik & MASKA_ANODY); // cykliczne przełączanie kolejnej anody licznik <<= 1; if(licznik>32) licznik = 1; } #ifndef nixie_h #define nixie_h #define NIXIE_DATA PORTA #define NIXIE_DATA_DIR DDRA #define ANODY_PORT PORTB #define ANODY_DIR DDRB #define ANODA1 (1<<PB0) #define ANODA2 (1<<PB1) #define ANODA3 (1<<PB2) #define ANODA4 (1<<PB3) #define ANODA5 (1<<PB4) #define ANODA6 (1<<PB5) #define MASKA_ANODY (ANODA1|ANODA2|ANODA3|ANODA4|ANODA5|ANODA6) // definicje bitów dla 74147 #define A0 (1<<0) #define A1 (1<<1) #define A2 (1<<2) #define A3 (1<<3) extern volatile uint8_t godzina1; extern volatile uint8_t godzina2; extern volatile uint8_t minuta1; extern volatile uint8_t minuta2; extern volatile uint8_t sekunda1; extern volatile uint8_t sekunda2; void nixie_init(void); #endif
  4. Witam. Buduję zegar na lampach NIXIE IN12B, uC to Atmega32 oraz dekoder BCD SN74141, napięcia zasilania lamp 180V. Wszystko działa na multipleksowaniu. Problem też znany gdyż chodzi tu o tzw ,,duszki". Szukałem sprzętowych rozwiązań i znalazłem takie z diodami i nie mam pojęcia czemu to nie działa, być może przez to ze używam tego dekodera, gdyż na innych schematach w internecie ludzie używali do załączania poszczególnych cyfr tranzystorów wysokonapięciowych. Pytanie jak rozwiązać ten problem u mnie? Prosiłbym o pomoc. Kawałek schematu z internetu podłączone mam identycznie jak tu i dodałem do każdej linii dekodera diodę podłączoną anodą do wyprowadzenia z każdego pinu. Diody jakie zastosowałem to IN5819 kondensator 200nF. Jeżeli podłączyłem jak na schemacie wraz z tym rezystorem 100kohm to wszystkie cyfry mi się paliły, próbowałem różne kombinacje z tym robić i ciągle widać duszki.
  5. #1 04 Sty 2019 14:27 Witam. Mam zagadnienia do przerobienia i pytanie czy mógłby ktoś udostępnić jakieś informacje na ten temat jeśli takie posiadacie. Może znacie jakieś strony, gdzie można o tym coś przeczytać. Jakoś za ciekawych informacji nie uzyskałem na własną rękę. Interesuje mnie: 1. Metoda linearyzacji charakterystyk sensorów termicznych 2. Przedpola analogowe dla sensorów termicznych - przegląd rozwiązań. Nie za bardzo rozumiem te przedpola analogowe i co tu wgl chodzi. Z góry dziękuję za pomoc i wszelkie materiały.
  6. Witam. Mam problem z sterownikiem FUGO FUR-33-00 . Ogólnie sterownik działa poprawnie jak nastawię temp zadaną na 50 stopni a temperatura na czujniku wynosić będzie np 60 stopni to dmuchawa jest wyłączona jeżeli temp spadnie poniżej 50 stopni to załącza dmuchawę czyli tak jak powinno być. Temp wyłączenia dmuchawy ustawiłem na 30 stopni czyli powinien wyłączyć dmuchawę przy 30 a nie zrobi tego nigdy nawet jak temp spadła by do 20 stopni czy 10. Traik i optotriak działa poprawnie, procesor wystawia stany logiczne jak trzeba sprawdzałem multimetrem, filtracja zasilania poprawna pojemności kondensatorów zmierzyłem. Wygląda to tak jak by po ustawieniu wyłączenia temp dmuchawy zmienna na pewno w programie się zmienia, ale brakuje wykonania rozkazu przez uC czyli jak by zniknęła jedna linia kodu w programie. Jest to możliwe czy macie inne teorie na to? Wszystkie inne funkcje działają poprawnie.
  7. Pixelx

    Kolba lutownicza Solomon

    1. Nie no chodziło mi bardziej czy ma ktoś jakąś sprawdzoną bibliotekę, wiem, że są. 2. Nie wiele mi to mówi, lepiej było by mi to zrozumieć na jakimś kodzie 4. Wiem, że nie zeszli bo niższej temperatury nie ma niż -273,15 Doradziłbyś jeszcze jak to przeliczyć może w jakimś kodzie i zamienić te volty na temp. Do sterowania grzałką chce wykorzystać sterowanie fazowe. Sterowanie już zrobiłem i zsynchronizowałem się z siecią. Wykorzystałem układ PC814. Na razie mam tak, że za pomocą potencjometru mogę regulować płynnie kąt załączania triaka. I nie za bardzo na razie wiem jak przeliczyć to na temp te wartości z termopary i jak wysterować ten triak (czyli jego kąt załączania). Wygląda to tak na oscyloskopie płynnie zmieniam kąt i teraz chciałbym to przełożyć na grzałkę w kolbie. Regulacja jest już za transformatorem na wtórym 2x12V i połączyłem uzwojenia i mam 24V Pomoże ktoś? Z góry dziękuje za wszelkie odpowiedzi
  8. Pixelx

    Kolba lutownicza Solomon

    Dzięki ciekawy układ. Kolba właśnie dzisiaj przyszła ESD Solomon SL-20ESD 1. Masz może do niego jakąś bibliotekę??. Piszę w C. Może go wykorzystam, ale chciałbym też to też zobaczyć na wzmacniaczu operacyjnym. 2. Ktoś zna z was może jakiś algorytm przeliczenia tego? 3. Jeżeli np: dla temp 450 st jest napięcie po wzmocnieniu 2V a regulacja ma być od 80-450 st to wtedy lepiej zastosować zewnętrze napięcie referencyjne do ADC o wartości 2V? 4. Nie do końca rozumiem ta tabelę W kolumnie pierwszej mam temp a w pierwszym wierszu wartości od 0 do 45? Co to oznacza?
  9. Pixelx

    Kolba lutownicza Solomon

    Mam jeszcze takie pytanie. Bo zamówiłem tą kolbę i jak ustalić jakie będzie max napięcie na termoparze dla np: 400 stopni po wzmocnieniu przez wzmacniacz. Jest jakaś nota katalogowa albo charakterystyka? Bo bym chciał mieć regulację od np: 80 do 400 albo 450 stopni.
  10. Pixelx

    EEPROM

    Działa, dzięki za pomoc . Już rozumiem.
  11. Pixelx

    EEPROM

    Witam. Mam problem z zapisem i odczytem do pamięci EEPROM na Atmega32. W głównej funkcji programu definiuje odczyt czyli w int main(void) settemp=eeprom_read_byte(&settemp); i gdzieś w programie zapis do pamięci i to działa, bo zapisuje zmienną i odczyt też działa. eeprom_write_byte(100, settemp); Problem pojawia się gdy zmienię adres np: 102 i już nic się nie zapisuje tylko na adresie 100. Dlatego nie mogę zapisać innych zmiennych do pamięci EEPROM. Z czego to wynika jak zapisać więcej zmiennych do pamięci? __________ Komentarz dodany przez: Treker
  12. Pixelx

    Kolba lutownicza Solomon

    Miało być, że kolba lutownicza może być zasilania z prądu przemiennego, czyli ta którą wymieniłem wyżej w postach. A transformator który wykorzystam to TST160/002 2x12V 2x6,6A
  13. Pixelx

    Kolba lutownicza Solomon

    Pokazuje bo chciałem się upewnić w pewnych kwestiach takich jak z tym minusem. W kwestii kolby czy może być na AC zasilania ta co podałem wyżej i w kwestii transformatora. Podałbyś jakieś inne wzmacniacze zamiast tego co tam jest do wzmacniania sygnału z termopary i który by się nadał lepiej?
  14. Pixelx

    Kolba lutownicza Solomon

    Schemat znalazłem taki. To reszta schematu. Podaje do tego link bo nie szło wrzucić tutaj jako załącznik. http://i67.tinypic.com/302tes2.jpg Ja bym chciał to zrealizować podobnie tylko zamiast takiego detektora przejścia przez zero, użyć układu PC184 do detekcji zera i wykorzystać sterowanie fazowe grzałką. Transformator chcę 2x12V 160VA. Więc jeżeli połączę uzwojenia to uzyskam 24V. Tylko nie rozumiem jednego, za bardzo. Czemu w punkcie który zaznaczyłem na wycinku schematu jest punkt masy tam? Czy rzeczywiście połączenie uzwojenia wtórnego da w tym miejscu punkt masy?
  15. Pixelx

    Detekcja zera

    Witam. Mam zamiar zbudować cyfrowo sterowaną stacje lutowniczą. Moje pytanie to o układ detekcji zera. Chciałbym wykorzystać PC184. Znalazłem schemat w książce Pana Mirosława Kardasia, układ do detekcji zera ale na 230V. Chciałbym to wykorzystać, ale na napięciu 24V. Pytanie jakie wartości rezystorów dobrać? Czy mógłby ktoś mi doradzić? Większość układów do detekcji jest na LM311, a ja chciałbym to zbudować na tym PC184. Doradzi ktoś jak dobrać wartości rezystorów? Z góry dzięki za pomoc.
×