Nano LANReach s pic

Ano…pokud tam pustíš 3.3V mělo by bezpečně vylézt 5V. Naopak to dělám jen s děličem bez zenerky. To zapojení s fetama nechápu…jsem strašně zvrácenej člověk a používám hotová hradla, neboť když se ve škole braly fety tak jsem asi chyběl :smiley:
Tvořil jsem aplikaci s webserverem pro smartphony. Kvůli ceně bylo toto řešení zamítnuto a přešlo se k mikročipu. Také mi vadilo, že jsem nemohl používat webserver a zároveň modul používat jako virtuální seriovou linku. Buď šlo jedno nebo druhé. Jo a vyloženě mě sr*** ty AT příkazy. Co by jsi chtěl pro inspiraci? Vzhledem k tomu, že to mám v šuplíku pošlu ti všechno…včetně hotových plošňáků :slight_smile:

Ahoj, tak inspiraci si zatim nechám zatim sem na cca. 750 řádkách ASM používám 18f14k22 zatim mi chodí IN a OUT s html z pandatronu největší problém je čtení z pwlan modulu. Teď dělám na matematice na práci s AD převodníkem (fp32 bit) a teploměr ds18b20.
Tak nějak to bude základ pro domácí atomatizaci přez web server.

Funkce převodníku s FET:

Směr zleva doprava (převod 3.3V → 5V):

  • Stav HIGH (3.3V) - FET je uzavřený, odpor R2 zvedne úroveň vpravo na +5V.
  • Stav LOW (0V) - FET je otevřený a stahuje pravou stranu na 0V

Směr zprava doleva (převod 3.3V ← 5V):

  • Stav HIGH (5V) - FET je uzavřený, R1 zvedne úroveň vlevo na +3.3V
  • Stav LOW (0V) - substrátová dioda FET stahuje levou stranu na asi 0.7V, navíc FET se otvírá (protože source pin je záporněší než gate), čímž se vlevo zajistí stav LOW
    mosfet_level_converter.jpg

Najvyssi cas prejst na Cko

to Atlan:
C je asi krásná věc když ho vidím tak to rozlousknu co to asi dělá ,ale jinak nechápu jak se to píše musim pořídit něco na naučení jak to psát. Jinak píšu jen v asm a z těch 750 řádků je tak 300 jenom abych nezapoměl co to dělá neberu ; za instrukcí a mrtě includ… co se stále opakuje. Časem tomu C treba na chu´t prijdu zatim mě to nerápí.

snažím se o totéž, ale já jelikož nejsem takový psavec chci to zkusit v c a s 18F452 6xvstup 6xvýstup 6xDS (asi 6ku mám rád :laughing: )

jinak nepadl verdikt na převodník s fetam :slight_smile: brát/nebrat zdá se mi to levný a jednoduchý…

Jesli brát/nebrat je asi jen otázka názoru…já jsem stále příznivcem tý 74HCT14. Stačí pár drátů a voilá…

možná na tom něco bude je to převodník za 10kč s těma fetama to bude tak za 16 :laughing: ni nic zkusím to tím hradlem…

S tou 74HCT14 uděláš ale jenom jednosměrný převod, ale ne obousměrný, ne?

Na druhou stranu bych to udělal přes dělič.

to: lucky

Ahoj, stěma 6… to máš zajímavé já to mám předpřipravené na 8*8 in/out používám 3 IN a 1OUT zatím testovací režim.
DS18B20 mám připravené na jeden vstup/výstup 1-8 teplot a teď mučim AD a matematiku 32bit na měření napětí na akumulátorech 24v a IxyA.
To není problém teď ještě nacvičit html. Zatím používám html z pandatronu.
A ten převodník 3/5v tam bych se klaněl k tomu fetu jo a ještě se podívej na PDF pic18fxxx některé vstupy jsou 5v tolerant.

Tak tech 6in/out je zatim jen odhad, ale vzhledem k tomu ze by to melo ovladat solani system, krbovou vlozku, tepelne cerpadlo a akumulacni nadrz, tak je to mozna malo ale zase nevim jak to presne dotahnu, solar bude mozna samostane (rozdilovym termostatem) takze budu chtit zobrazit jen teplotu krb asi taky tak, takze zbude par cerpadel a duomixu… Jsem trochu rad ze se nekdo zastal tech fetu docela se mi na prvni pohled libili… Skoda ze nepises v C docela by mi to pomohlo na asm se mi uz zpet nechce i kdyz v C mi neblikala jeste ani ledka :slight_smile: ale uz se dotoho chystam…

Ahoj, tak Ti povim na to ,že ti nebliká ani led tak to máš pořádný sousto.

tak ledka uz blikla :slight_smile: uz jsem rozchodil i LCD a teď se chystam na komunikaci s DS cidlama doufam ze se podari a pak uz jen seriovou komunikaci s LANsocketem a pak to cely doladit :laughing: mam na to málo casu tak to jde pomalu…

pak uz jen seriovou komunikaci s LANsocketem… uz iba hej. som zvedavy

Tak to je fofr sem zvedav dej vědět.

mám problém s DSkama hledal jsem nejaky knihovny že to “obšlehnu” a upravím pro svuj program, ale jelikož nejsem tak zběhlí v programování tak mi spousta věcí uniká nemáte někdo zdroják pro více čidel (vyhledání kodu čidla a přiřazení ke každému čidlu nějakou proměnou co bych pak posílal na displej…) nejlépe s poznámkami

skus se kouknout tady … s-o.webnode.cz/jednovodicova-sbernice/

nemůžu s těma dskama hnout už jsem si udělal program jen pro jedno čidlo a lcd mrkněte prosím kde je chyba nejde mi to zkompilovat (mplabX + XC8)

[code]/*
Připojení LCD HD44780 k
PIC18F452,externí krystal 10MHz
LCD připojen na PORTD,4bit komunikace
Teploměr DS18S20 s přesností 0,5°C,připojen k PORTC.RC0
*/

#include <htc.h>
#define _XTAL_FREQ 10000000

#pragma config OSC = HS
#pragma config WDT = OFF

//======================================

#define LCD_PORT PORTD
#define LCD_TRIS TRISD

#define RS PORTDbits.RD0
#define EN PORTDbits.RD1

#define DQ PORTAbits.RC0
#define DS TRISAbits.TRISC0

#define LCD_HOME 0x02
#define LCD_CLR 0x01

//==========================================
// 1wire sbìrnice
//=========================================

//Pøíkaz reset
char Ow_Reset(void)
{
unsigned char PRESEN;
DS = 0; //PA0 = výstup
DQ = 0; //PA0 = L
__delay_us(480);

DS = 1;				//PA0 = vstup
__delay_us(65);

PRESEN = 0;

//Pokud je pøipojeno èidlo PRESEN = 1

if(DQ == 0)
	{
		PRESEN = 1;	
	}
__delay_us(480);
return PRESEN;

}

//Read byte
char Ow_Read(void)
{
unsigned char byte = 0;
for(unsigned char i=0;i<8;i++)
{
DS = 0; //PA0 = výstup
DQ = 0; //PA0 = L
__delay_us(5);

	DS = 1;				//PA0 = vstup		
	__delay_us(10);

 		if(DQ > 0)
		 {
			byte|=1<<i;		
		 }
	__delay_us(55);
 }
 return byte;

}

// Write byte
void Ow_Write(unsigned char data)
{
for(unsigned char i=0;i<8;i++)
{
if((data&(1<<i)) > 0)
{
DS = 0; //PA0 = výstup
DQ = 0; //PA0 = L
__delay_us(5);

	  DS = 1;				//PA0 = vstup				  	
	  __delay_us(65);
	 }
	else
	 {
	  	DS = 0;				//PA0 = výstup
		DQ = 0;				//PA0 = L				  	
	  __delay_us(60);

	  DS = 1;				//PA0 = vstup				  	
	  __delay_us(10);
	 }	 	
 }	 

}

//=======================================
// LCD 4bit komunikace
//======================================
void Strobe(void)
{
EN = 1;
__delay_us(100);
EN = 0;
__delay_us(100);
}

//Pøíkaz
void Lcd_Cmd(unsigned char Cmd)
{
LCD_PORT = (Cmd & 0xF0); //maskuj dolní 4bity
RS = 0; //RS = 0(pøíkaz)
Strobe();

LCD_PORT = (Cmd & 0x0F)<<4;//maskuj horní 4bity a posun o 4místa vlevo
RS = 0; //RS = 0(pøíkaz)
Strobe();

/*
Pokud je výsledek v podmínce nula, jedná se o
pøíkaz “Vymaž dislej” nebo “Návrat na zaèátek”, které
vyžadují delší interval
*/
if (Cmd & 0b11111100) __delay_us(100);else __delay_ms(2);
}

//Data
void Lcd_Chr(unsigned char Chr)
{
LCD_PORT = (Chr & 0xF0);
RS = 1; //RS = 1(data)
Strobe();

LCD_PORT = (Chr & 0x0F)<<4;
RS = 1; //RS = 1(data)
Strobe();
}

//inicializace LCD
void Lcd_Init(void)
{
__delay_ms(15); //èekej 15ms

//Nastavení PORTu na výstup
LCD_TRIS = 0b00000011;

//zapiš 03h 8bitová komunikace
LCD_PORT = 0b00110000;
Strobe();
__delay_ms(5); //èekej > 4,1ms

//zapiš 03h 8bitová komunikace
Strobe();

//zapiš 03h 8bitová komunikace
Strobe();

//4bitová komunikace
LCD_PORT = 0b00101011;
Strobe();

Lcd_Cmd(0b00101000); //dva øádky
Lcd_Cmd(0b00000001); //smaž LCD
Lcd_Cmd(0b00001100); //zapni LCD
Lcd_Cmd(0b00000110); //incrementace
}

//Výpis øetìzce
void Lcd_Out(const char *str)
{
unsigned char x = 0;
while(str[x]!=0)
{
__delay_us(100);
Lcd_Chr(str[x]);
x++;
}
}

//Nastavení ukazatele na pozici x(1…2),y(0…15)
void Lcd_Gotoxy(unsigned char row,unsigned char col)
{
switch(row)
{
case 1:row=0x00;break;
case 2:row=0x40;break;
}
Lcd_Cmd(0b10000000 | row | col);
}
//==================================================

//==================================================
// Hlavní program
//==================================================
void main(void)
{
unsigned int temp;
unsigned int teplota;
unsigned char scratchpad[2];
unsigned char Error;

char text] ="000.0";

//CMCON = 0b00000111;
    ADCON1=0b00000000;
    TRISC=0b00000000;


Lcd_Init();
Lcd_Out("Teplomer s ");
Lcd_Gotoxy(2,0);
Lcd_Out("DS18S20");
__delay_ms(300);
Lcd_Cmd(LCD_CLR);
Lcd_Cmd(LCD_HOME);

while(1)
{
	Error =	Ow_Reset();
	if (Error == 1)
	{
		Ow_Write(0xCC);					//Pøeskoè ètení ROM
		Ow_Write(0x44);					//Zahájení pøevodu

		__delay_ms(400);				//Doba pøevodu
	}

	Error =	Ow_Reset();
	if (Error == 1)
	{
		Ow_Write(0xCC);					//Pøeskoè ètení ROM
		Ow_Write(0xBE);					//Ètení scratchpadu

//Naètení a uložení obsahu scratchpadu
scratchpad[0]=Ow_Read();
scratchpad[1]=Ow_Read();

		teplota = (scratchpad[1]<<8)|scratchpad[0];

		text[0] = ' '; 

//Zobrazení “-” pøi teplotì < 0°C
if(teplota & 0x8000)
{
text[0] = ‘-’;
teplota = ~teplota + 1;
}

		temp = teplota >> 1;

		Lcd_Gotoxy(1,0);
		Lcd_Out("Teplota:");

		if ((temp/100) > 0)
		{
			text[0] = 49;
		}	 
		else	
		{
			if(text[0] != '-')
			{
				text[0] = ' ';            //Nezobrazení nuly v øádù stovek	
			}	
		}
										  
		text[1] = ((temp%100)/10) + 48 ;	  //Výpoèet desitek
		if ((text[1] == 48)&&(text[0] != 49))
		{
			text[1] = ' ';
		}

		text[2] = ((temp%100)%10) + 48 ;	  //Výpoèet jednotek

//Výpoèet desetin
temp = (teplota & 0x01) * 5;
text[4] = temp + 48;

		Lcd_Out(text);
		Lcd_Chr(0xDF);		//Zobrazení °
		Lcd_Chr(0x43);		//Zobrazení C
	}    	
 	else
	{	

//Error
Lcd_Cmd(LCD_HOME);
Lcd_Gotoxy(1,0);
Lcd_Out(“DS18S20 = Error”); //èidlo nezapojeno
}
}
} [/code]

ještě výpis kompileru

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `C:/Users/Tomas/Desktop/top/pokus.X'
make  -f nbproject/Makefile-default.mk dist/default/production/pokus.X.production.hex
make[2]: Entering directory `C:/Users/Tomas/Desktop/top/pokus.X'
"C:\Program Files (x86)\Microchip\xc8\v1.12\bin\xc8.exe" --pass1  --chip=18F452 -Q -G --asmlist  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug,9 --addrqual=ignore -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,+plib "--errformat=%%f:%%l: error: %%s" "--warnformat=%%f:%%l: warning: %%s" "--msgformat=%%f:%%l: advisory: %%s"  -obuild/default/production/_ext/43898991/LCD_HD44780_DS18S20.p1  ../../LCD_HD44780_DS18S20.c 
../../LCD_HD44780_DS18S20.c:40: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:40: error: illegal conversion between types
int -> volatile union S100
../../LCD_HD44780_DS18S20.c:41: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:41: error: illegal conversion between types
int -> volatile union S1
../../LCD_HD44780_DS18S20.c:44: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:44: error: illegal conversion between types
int -> volatile union S100
../../LCD_HD44780_DS18S20.c:50: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:50: error: simple type required for "=="
../../LCD_HD44780_DS18S20.c:64: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:64: error: illegal conversion between types
int -> volatile union S100
../../LCD_HD44780_DS18S20.c:65: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:65: error: illegal conversion between types
int -> volatile union S1
../../LCD_HD44780_DS18S20.c:68: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:68: error: illegal conversion between types
int -> volatile union S100
../../LCD_HD44780_DS18S20.c:71: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:71: error: simple type required for ">"
../../LCD_HD44780_DS18S20.c:87: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:87: error: illegal conversion between types
int -> volatile union S100
../../LCD_HD44780_DS18S20.c:88: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:88: error: illegal conversion between types
int -> volatile union S1
../../LCD_HD44780_DS18S20.c:91: error: not a member of the struct/union ""
../../LCD_HD44780_DS18S20.c:91: advisory: too many errors (21)
make[2]: Leaving directory `C:/Users/Tomas/Desktop/top/pokus.X'
make[1]: Leaving directory `C:/Users/Tomas/Desktop/top/pokus.X'
(908) exit status = 1
make[2]: *** [build/default/production/_ext/43898991/LCD_HD44780_DS18S20.p1] Error 1
make[1]: *** .build-conf] Error 2
make: *** .build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1s)