Skocz do zawartości

Sanwa 7000 PC & Android link


Pomocna odpowiedź

1 godzinę temu, _LM_ napisał:

Attiny13 w obudowie soic8 w trakcie przygotowań do wgrania wsadu na płycie docelowej 

Ach jak dobrze, że w nowych AVRach można wgrywać jednym drutem 🙂 

  • Lubię! 1
Link to post
Share on other sites
9 godzin temu, pmochocki napisał:

Ach jak dobrze, że w nowych AVRach można wgrywać jednym drutem 🙂 

W starych też, jest przecież debugWire 

  • Lubię! 1
Link to post
Share on other sites
21 minut temu, _LM_ napisał:

W starych też, jest przecież debugWire 

W sumie racja, ale chyba rzadko używany był, ciekawe dlaczego... 

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

No i jak zwykle się pośpieszyłem 🤬 

bad.thumb.JPG.bb2602182375b35f4e9037ccd93511aa.JPG

wyjście Q1 miało być na INT0 -> PB1, teraz w programie muszę użyć przerwania PCINT zamiast INT niech to szlag.....

To czego mi naprawdę brakuje w AVR to mapowania pinów, a przynajmniej wyjść/wejść peryferii sprzętowych tak jak STM kolego @pmochocki sorki za taką prywatę a czy mógłbyś spojrzeć na ten kod i podpowiedzieć co w rejestach przestawić abym mógł użyć PCINT zamiast INT bo mi się już odechciewa...

/*
 * main.c
 *
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <util/atomic.h>

#include "soft.h"


/*********** Makra ***********/

#define  SRX      PB1	//sanwa rx
#define  STX      PB2	//sanwa tx
//#define  URX      PB3	//uart rx
//#define  UTX      PB4	//uart tx

#define  SRX_LOW  (PINB & (1<<SRX))
//#define  URX_LOW  !(PINB & (1<<URX))
#define  STX_SET  PORTB|=   (1<<STX)
#define  STX_RST  PORTB&=  ~(1<<STX)

//#define  UTX_SET  PORTB|=   (1<<UTX)
//#define  UTX_RST  PORTB&=  ~(1<<UTX)
//#define  UTX_TOG  PORTB^=   (1<<UTX)
/*********** Koniec makr automatycznych ***********/
#define LOOKUPDATA 6
#define TIMERPROG 2
#define CLOCKDELAY 75
#define TPAUSE 6500

uint16_t timerInterval = 25; // default




const __flash char inTab[LOOKUPDATA]= {'a','b','c','d','e','f'};
const __flash uint16_t  out_tab[LOOKUPDATA] =  {30,100,300,600,1200,3000};


void getData(void);
volatile uint16_t timers[TIMERPROG];
volatile uint8_t intFlag;
volatile char c;

int main(void){
	//TCCR0A |=
	TCCR0A|= (1 << WGM01);			// tryb CTC
	OCR0A = (F_CPU / 1024UL) / 100UL;	// 100ms - 100Hz
	TCCR0B |= (1 << CS02) | (1 << CS00);	// preskaler = 1024
	TIMSK0 |= (1 << OCIE0A);			// przerwanie Compare Match

	MCUCR|= 1<<ISC01; // zbocze opadajace
	GIMSK|= 1<<INT0;  // zezw na przerwanie
	 DDRB|=(1<<STX);
	PORTB|=(1<<SRX);

	uartPortConf();

 //   PCMSK |= (1<<PCINT3); // maska zmiany pinow: przerwania przy nadlatujacym uart
 //   GIMSK |= (1<<PCIE); // wlacz przerwanie PCINT

    sei();
for(;;){

//if(c){
//
//
//
//	for(uint8_t i = 0; i < LOOKUPDATA; i++){
//		if(c == inTab[i]){// jesli ten znak wystepuje
//			ATOMIC_BLOCK(ATOMIC_RESTORESTATE){
//				timerInterval = out_tab[i];
//				timers[0] = timerInterval;
//		}
//			uart_putc(c);
//			uart_putc('\n');
//
//			break;
//		}
//	}
//	c=0;
////	PCMSK|=(1<<PCINT3); // ena pcint
//}

if (intFlag) {
			TIMSK0 &=~(1<<OCIE0A); // pauza timera
			getData(); // wysylka danych online
			timers[0] = timerInterval; // tu brak atomic block poniewaz przerwania i tak zablokowane
			intFlag = 0;
			TIMSK0|=(1<<OCIE0A); // odblokowanie timera
		}


		if (!timers[0]) {

			STX_RST;
			_delay_ms(10); // sync
			STX_SET;
			timers[0] = timerInterval;
_delay_us(10);

GIFR|=(1<<INT0);// zerowanie zgloszonego przerwania
GIMSK|= (1<<INT0); // odblokowanie przerwanaia

		}
	}
}

uint8_t getByte(void)
{
	register uint8_t temp = 0;

	for (uint8_t i = 0; i < 8; i ++)
	{
		 STX_RST;//	IRLED_on;
		_delay_us(CLOCKDELAY + 25); // czasz na ustalenie sie stanu

	STX_SET;//	IRLED_off;

	if (SRX_LOW)temp |= (1 << i);

	_delay_us(CLOCKDELAY);

	}

	return temp;
}

void getData(void)
{
	//uint8_t data[20];

	char bf[3];

	for (uint8_t i = 0; i < 20; i ++){
		itoa (getByte(),bf,16); // wysylka hex online bez buforowania
		bf[2] = 0;
		uart_puts(bf);
		uart_puts(" ");
	}

	uart_putc('\n');
}

ISR(INT0_vect){ // zgloszenie z miernika
	GIMSK &=~(1<<INT0); // blokuj przerwanie
	intFlag = 1;
}


ISR(TIM0_COMPA_vect)//Przerwanie jest sekundnikiem oraz generuje opoxnienia systemowe
{
	uint16_t x;
	for (uint8_t i = 0; i < TIMERPROG; i++ ){
	x = timers[i];
	if (x) timers[i] = --x;
	}
}

//ISR(PCINT0_vect){
////	PCMSK &= ~(1<<PCINT3); // wyl przerwanie i mozna odczytac znak
//	c=uart_getc();
//	GIFR|= (1<<PCIF);//kasowanie przerwania
//}

 

Edytowano przez _LM_
Link to post
Share on other sites
46 minut temu, _LM_ napisał:

@pmochocki sorki za taką prywatę a czy mógłbyś spojrzeć na ten kod i podpowiedzieć co w rejestach przestawić abym mógł użyć PCINT zamiast INT bo mi się już odechciewa...

// init
GIMSK |= (1 << PCIE); // wlacz przerwanie PCINT
PCMSK |= (1 << PCINT2); // Ustawienie maski dla PCINT2
sei;

ISR(PCINT2_vect)
{
    // obsługa przetwanie
}

Nic więcej nie powinno być potrzebne.

EDIT:

Pin change interrupts - PCI will trigger if any enabled PCINT[5:0] pin toggles. 
Nie możesz sobie ustawić czy zbocze ma być opadające czy narastające - to nie będzie u Ciebie problemem?

Edytowano przez pmochocki
  • Pomogłeś! 1
Link to post
Share on other sites

No właśnie, istotne jest aby to przerwanie było wyzwolone zboczem opadającym, niby pętla przez większość czasu i tak nie robi nic ciekawego i można by badać ten pin, jednak przerwanie upraszcza cały proces. Uhh ależ mnie to rozwaliło, a wszystko przez to że zmieniłem schemat bo chciałem dodać taktowanie mikrokontrolera z zewnętrznego generatora i dodać odbiór danych z uart. Najlepsze jest to, że jak rysowałem ten schemat to wiedziałem że trzeba te zmiany zaprowadzić a jednak taki babol, chyba już późno musiało być. No cóż to mnie tylko utwierdza w tym że prototypy warto budować w warunkach domowych. Dzięki za pomoc, później coś powalczę 🙂

  • Lubię! 1
Link to post
Share on other sites
19 minut temu, pmochocki napisał:

Nie możesz sobie ustawić czy zbocze ma być opadające czy narastające - to nie będzie u Ciebie problemem?

Nie, po prostu po przerwaniu zbadam stan pinu i będzie hulało. 

  • Lubię! 1
Link to post
Share on other sites
(edytowany)

Worklog powoli dobiega końca, poskładałem i uruchomiłem port multimetru. Pomimo że urządzenie w istocie jest proste. Nie obyło się bez błędów i poprawek, również wersja której teraz używam powinna być jeszcze raz przebudowana dotyczy to płytki IR portu jak i płytki konwertera uart i BT. Tak to wygląda:

IMG_20211127_165249.thumb.jpg.2584562e23ef6e33fe7fc0ef8662372a.jpgIMG_20211127_165337.thumb.jpg.091b7271d947b30c5252ac65c222d081.jpgIMG_20211127_165443.thumb.jpg.a9c58a1e6eb4868c26d91460565da76a.jpg

Mam problem z obudową gdyż jak narazie nie posiadam drukarki 3D a nie bardzo jest co dopasować, myślałem przez chwilę czy nie zalać całości w żywicy epoksydowej no ale wiadomo niema szans na jaki kolwiej serwis. Coś jednak trzeba będzie wykombinować. 

Edytowano przez _LM_
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.