Sari la conținut
ELFORUM - Forumul electronistilor

inceput de ATMEL


Mad_Turnip

Postări Recomandate

cu ce gresesc ? nu imi ies if-urile ...

if ((PORTB | (1<<3)) >>3){ k = "1"; }
PORTB este folosit pentru iesiri iar PINB pentru intrari.pentru a verifica daca un bit este setat pe 0 se face asa:
if ((PINB & (1<<3)) == 0) ...

atingand cu mana pinii de input de la liniile tastaturii am vazut ca este destul pentru a reactiona. pull-up-ul nu trebuia sa scape de problema asta ?

Depinde de pullup. Il folosesti cel intern? Este de 100k. Incearca cu un pullup extern de 4.7k.
Link spre comentariu
  • Răspunsuri 36
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Mad_Turnip

    20

  • godFather89

    10

  • yo9hnf

    2

  • nana

    1

Top autori în acest subiect

a iesti asa

char kb_read(){	PORTB = 0b01111110;	if ((PINB & (1<<3)) == 0){ k = "1"; }	if ((PINB & (1<<4)) == 0){ k = "4"; }	if ((PINB & (1<<5)) == 0){ k = "7"; }	if ((PINB & (1<<6)) == 0){ k = "*"; }	PORTB = 0b01111101;	if ((PINB & (1<<3)) == 0){ k = "2"; }	if ((PINB & (1<<4)) == 0){ k = "5"; }	if ((PINB & (1<<5)) == 0){ k = "8"; }	if ((PINB & (1<<6)) == 0){ k = "0"; }	PORTB = 0b01111011;	if ((PINB & (1<<3)) == 0){ k = "3"; }	if ((PINB & (1<<4)) == 0){ k = "6"; }	if ((PINB & (1<<5)) == 0){ k = "9"; }	if ((PINB & (1<<6)) == 0){ k = "#"; }		return k;}

functioneaza aproape bine, numai ca in loc de 1 este 2(PB0 cu PB3), in loc de 2 este 3(PB1 cu PB3) si in loc de 3 este 1(PB2 cu PB3). restul combinatiilor merg ok.

Link spre comentariu

functioneaza aproape bine, numai ca in loc de 1 este 2(PB0 cu PB3), in loc de 2 este 3(PB1 cu PB3) si in loc de 3 este 1(PB2 cu PB3). restul combinatiilor merg ok.

Nu am inteles ce vrei sa zici...E o practica buna sa folosesti si else-uri, astfel devine ceva mai rapida functia.
Link spre comentariu

aha, voi modifica cu else-uri :)vreau sa zic ca toate tastele functioneaza numai ca daca apas 1 apare 2, daca apas 2 apare 3 si daca apas 3 apare 1, restul functionand corect. am scos tastatura si conectam PB0 cu PB3 adica corespunzator cifrei 1 de pe tastatura, rezulta cifra 2 pe ecran. si tot asa la PB1 cu PB3 da 3 si PB2 cu PB3 da 1. nu-mi dau seama de unde poate fi.

Link spre comentariu

studiind codul am ajuns la concluzia ca ii trebuie un mic delay intre PORT si citirea pinilor, am incropit asa ceva:

#include<avr/io.h>#include <util/delay.h>#include <hd44780.h>#include <string.h>uint16_t a,b,c,u;char k,k1,x;char line1[20],line2[20],line3[20],line4[20];char password,input_password;void delay_pir(){	lcd_goto(2);	lcd_puts("* INITIALIZARE *");	lcd_goto(40);	lcd_puts("Initializare PIR-uri      2 minute");	for(a=1;a<=120;a++){		_delay_ms(10);	}	lcd_clrscr();}void kb_init(){	DDRB = 0b00000111;	PORTB = 0b01111111;}char kb_read(){	k = "";	PORTB = 0b01111110;	_delay_ms(10);	if ((PINB & (1<<3)) == 0){ k = "1"; } else { k = k; }	if ((PINB & (1<<4)) == 0){ k = "4"; } else { k = k; }	if ((PINB & (1<<5)) == 0){ k = "7"; } else { k = k; }	if ((PINB & (1<<6)) == 0){ k = "*"; } else { k = k; }	PORTB = 0b01111101;	_delay_ms(10);	if ((PINB & (1<<3)) == 0){ k = "2"; } else { k = k; }	if ((PINB & (1<<4)) == 0){ k = "5"; } else { k = k; }	if ((PINB & (1<<5)) == 0){ k = "8"; } else { k = k; }	if ((PINB & (1<<6)) == 0){ k = "0"; } else { k = k; }	PORTB = 0b01111011;	_delay_ms(10);	if ((PINB & (1<<3)) == 0){ k = "3"; } else { k = k; }	if ((PINB & (1<<4)) == 0){ k = "6"; } else { k = k; }	if ((PINB & (1<<5)) == 0){ k = "9"; } else { k = k; }	if ((PINB & (1<<6)) == 0){ k = "#"; } else { k = k; }	_delay_ms(20);	k1 = k;	if(k==k1){ return k;}}char kb_up(){	while(strcmp(kb_read(),"")==0){		_delay_ms(20);	}}void load_menu(){	 k = kb_read();	 for(a=1;a<=500;a++){		_delay_ms(10);	}	k1 = kb_read();	if(k == k1){		lcd_clrscr();		lcd_puts("MENU");	}	else	{	}}char main(void){DDRD = 0b00000110;PORTD = 0b00000001;password = "15";lcd_init();kb_init();lcd_clrscr();delay_pir();while(1){x = kb_read();	if(x==""){		lcd_puts("11:14:23  22.03.2011");		lcd_goto(0x40);		lcd_puts("Status: NIGHT");		lcd_goto(0x14);		lcd_puts("*Menu  |  Power GOOD");		lcd_goto(0x54);		lcd_puts("SENZORI:  A A R R A ");	}	else	{		if(x =="*"){			load_menu();		}		else		{			while(x != "#"){			x = kb_read();			input_password = strcat(input_password,x);				for(b=0;b<=20;b++){					_delay_ms(10);				}				kb_up();			}			if(strcmp(password,input_password)==0){				lcd_clrscr();				lcd_puts(input_password);				input_password = "";			}			else			{			lcd_goto(0x40);			lcd_puts(input_password);			input_password = "";				for(b=0;b<=500;b++){					_delay_ms(20);				}			}		}	}}}

din pacate nu prea functioneaza partea cu cititul codului si nu stiu cum sa fac compararea + citirea sirului de caractere ....

Link spre comentariu
  • 5 luni mai târziu...

Intrebare. am pus firele corespunzator, l-am alimentat prin programator. este prima programare a lui attitiny 13V 10PU. exetreme burnerul nu imi gaseste ic-ul, dar imi gaseste programatorul, iar Khazama AVR Programmer imi da eroarea ca "error setting usbasp isp clock, asta chiar si fara ic pus. Ce e de facut?In prealabil am mai programat cu usbasp-ul si alte atmeluri si a mers, dar acuma nu stiu ce are! Am pierdut deja o juma de zi incercand tot ce se putea, dar el batman. Vreau sa pun un amarat de hex in el si sa mearga....

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări