#1 micha
Tak už jsem to vyřešil chyba byla že byl zaplej komparator.
Příspěvky odeslané z IP adresy 86.63.207.–
Dobrý den, mám problém s čtením hodnoty která se vyskytuje na portu. Program vůbec nereaguje na změny.
Na RB0 je tlačítko které po zmáčknutí přivede na tento výstup jedničku.
START
MOVLW B'00000000' ; Všude nuly na PORTAB
MOVWF PORTB
PULSTART
BTFSC PORTA,0 ; Pokud je na RB0 nula tak přeskočím příkaz GOTO $+2 a obráceně
GOTO $+2
goto START
MOVLW B'111111111' ; Pokud je na RB0 nula tak na PORTB jsou všude jedničky (5V)
MOVWF PORTB
goto PULSTART
Předem moc děkuji
Tak jsem to už vyřešil. Problém jsem měl ve smyčce. A co se týče přehřívání tak se my ho podařilo trochu zkratovat.
Tak jsem tam vyzkoušel dát nejprve _INTOSC_OSC_NOCLKOUT
S tímto se procesor jen nadměrně zahříval a nic nedělá.
Tak jsem tam dal _INTRC_OSC_NOCLKOUT .
S tímto procesor pracuje jak jsem naprogramoval, ale jen do té doby než narazí na zpožďovací smyčku přes kterou se nedostane.
Co se týče zapojení procesoru, stačí jen mít zapojené napájení (PIN-5,14) + reset -MCLR (PIN-4) NA 5V?
Do includu jsem již koukal, ale nastavení je tam více, pro nastavení vnitřního oscilátoru by to měl být asi jeden z těchto?
_FOSC_INTOSCIO EQU H'3FFC'
_INTOSC_OSC_NOCLKOUT EQU H'3FFC'
_INTRC_OSC_NOCLKOUT EQU H'3FFC'
_FOSC_INTOSCCLK EQU H'3FFD'
_INTOSC_OSC_CLKOUT EQU H'3FFD'
_INTRC_OSC_CLKOUT EQU H'3FFD'
Když tak nato koukám tak by to mohl být jeden z těchto. No jdu to vyzkoušet.
_INTOSC_OSC_NOCLKOUT EQU H'3FFC'
_INTRC_OSC_NOCLKOUT EQU H'3FFC'
Ahoj, snažím se zprovoznit jeden jednoduchý testovací program na PIC16F628A.
V simulátoru program funguje, ale když ho nahraji do picu nefunguje.
Myslím si že pravděpodobně nastavuji špatně konfigurační bity. Nevím jak nastavím aby pic jela přes svůj vlastní vnitřní oscilátor.
Program pracuje tak že, dvě sekundy je na všech výstupech logická jedna a dvě sekundy logická nula.
INCLUDE "P16F628A.INC"
LIST P=16F628A, R=DEC
;-------------------------------------------------------------
__CONFIG _PWRTE_ON & _WDT_OFF
ORG 0X00
RAMOFF EQU 0X0C
d1 EQU RAMOFF
d2 EQU RAMOFF+1
d3 EQU RAMOFF+2
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS,RP0
BCF STATUS,RP1
NOP
NOP
ZPET
MOVLW B'11111111' ; VŠUDE JEDNA
MOVWF PORTA
MOVLW B'11111111' ; VŠUDE JEDNA
MOVWF PORTB
movlw 0x11
movwf d1
movlw 0x5D
movwf d2
movlw 0x05
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
;4 cycles
goto $+1
goto $+1
MOVLW B'00000000' ; VŠUDE NULY
MOVWF PORTA
MOVLW B'00000000' ; VŠUDE NULY
MOVWF PORTB
movlw 0x11
movwf d1
movlw 0x5D
movwf d2
movlw 0x05
movwf d3
Delay_1
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_1
;4 cycles
goto $+1
goto $+1
GOTO ZPET
END
Děkuji předem za vaše rady.
OK děkuji za rady
#2 KIIV
Jak čtu tak to asi jednoduše jak bych si představoval nejde.
Nedokážu si představit jaké bych příkazy z instrukční sady měl podle tebe použít. Instrukční sadu už poměrne ovládám, ale jen to co je v ní napsané.
Nešlo by to jednodušeji. Například přes aritmetické operace + BTFSC, BTFSC,DECFSZ,INCFSZ.
Vytvořit nějaké proměnné od kterých odečítat po každém zobrazení čísel na displeji a pak to vnořit do časové smyčky.
lze to vlastně napsat nějak takto nebo je to nemožné.
Ahoj pokouším se v assembleru naprogramovat časovač. Bohužel se mi nedaří. Mám 4 displeje na prvních dvou chci minuty a na druhém chci vteřiny, tlačítka zatím neřeším časovat začne odpočítávat od 0 do 59 minut a 59 sekund pak se resetuji. Používám multiplexní režim a BCD dekoder.
Toto se mi podařilo naprogramovat jen kdyby měly displeje vlastní paměť na poslední hodnotu kterou dostaly, to ale nemají, takže potřebuji poradit. Vůbec mě nejde dohromady cyklus pro zpoždění a zároveň vysílat data na display ( když probíhá zpožďovací cyklus tak se na displeji nic nezobrazuje- takže většinu času).
Nějaká nastavení PIC na výstupy, WDT atd. tu řešit nechci. Chci řešit jen program.
Dávám sem zkrácenou ukázku
Vysvětlivky:
zobrazX= vyšle číslo x do BCD překladače který je před displejem.
cekej1= časová smyčka 1 sekunda
PORTA,0 až 3= výstup na tranzistor který aktivuje požadovaný displej.
CALL zobraz0
BSF PORTA,0
CALL zobraz0
BSF PORTA,1
CALL zobraz0
BSF PORTA,2
CALL zobraz0
BSF PORTA,3
cekej1
CALL zobraz1
BSF PORTA,0
CALL zobraz0
BSF PORTA,1
CALL zobraz0
BSF PORTA,2
CALL zobraz0
BSF PORTA,3
cekej1
CALL zobraz2
BSF PORTA,0
CALL zobraz0
BSF PORTA,1
CALL zobraz0
BSF PORTA,2
CALL zobraz0
BSF PORTA,3
cekej1
zobraz0 MOVLW b'00000000'
MOVWF PORTB
RETURN
zobraz1 MOVLW b'00000001'
MOVWF PORTB
RETURN
zobraz2 MOVLW b'00000010'
MOVWF PORTB
RETURN
atd..
Předem děkuji za vaše rady.
už jsem to vyřešil
Ahoj snaží se vytvořit aplikaci pomocí PHP pro velice jednoduchou databázi knih.
Vesměs mi už všechno funguje, ale nemohu přijít na některé věci.
Hlavní problém co bych chtěl řešit je stále vyskakující chyba:
Undefined index: p in C:\xampp\htdocs\knihovna\index.php on line 20
Dále pak bych chtěl zamezit možnosti dát do databáze prázdné hodnoty.
A radám ohledně optimalizace se nebráním :)
databaze::prihlasit('knihovna', 'knihovna', '123456', 'localhost');?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Knihovna</title>
</head>
<body>
<h1>Knihovna</h1>
<?php
if(isset($_POST['Nazev'])) {
if (databaze::dotaz("INSERT INTO knihy (Název, Autor, Žánr, RokVydání) VALUES ('" . $_POST['Nazev'] . "', '" . $_POST['Autor'] . "', '" . $_POST['Zanr'] . "', '" . $_POST['Rok'] . "')")) {
echo'Přidáno. <a href="index.php">Zpět na přehled</a>';
}
}
else{
if($_GET['p']=='novy') {
echo '
<h1>Přidání knížky</h1>
<form action="index.php" method="POST">
<p>Název: <input type="text" name="Nazev"<br>
Autor:<input type="text" name="Autor" /><br>
Žánr:<input type="text" name="Zanr" /><br>
Rok vydání:<input type="text" name="Rok" /><br>
<input type="submit" value="Přidat"></p>
</form>
'
;
}
else {
$knihy = databaze::tabulka("SELECT * FROM knihy");
echo Tab::vytvorit($knihy);
echo'<p><a href="index.php?p=novy">Přidat další knížku</a></p>';
($_GET['p'] = '1');
}
}
?>
</body>
</html>
<?php
databaze::konec();
?>
stript
<?php
class Tab {
private $data;
public function __construct($data) {
$this->data = $data;
}
public static function vytvorit ($data) {
return new Tab ($data);
}
public function __toString() {
$tab = '';
foreach ($this->data as $radek) {
$tab.='<tr>';
foreach ($radek as $key => $val) {
$tab.='<td>' . $val . '</td>';
}
$tab.='</tr>';
}
return '<table>' . $tab . '</table>';
}
}
class databaze {
private static $link;
public static function prihlasit($db, $user, $pass, $host) {
self::$link = @mysqli_connect($host, $user, $pass, $db);
self::dotaz("SET CHARACTER SET UTF8");
self::dotaz('SET NAMES UTF8');
}
public static function dotaz($dotaz) {
return mysqli_query(self::$link, $dotaz);
}
public static function konec() {
mysqli_close(self::$link);
}
public static function tabulka($dotaz) {
$tabulka = array();
$vysledek = self::dotaz($dotaz);
while ($radek = mysqli_fetch_array($vysledek, MYSQL_ASSOC)) {
$tabulka[] = $radek;
}
return $tabulka;
}
}
?>
Předem děkuji za vaše rady