Schönen Abend,
nun habe ich vor Freude über die Funktion der RS232-Ausgabe (mit späterem Abkokeln des max232 UND des tiny2313 und Koma eines zweiten tiny mit lock1 und lock2) und anschliessendem Netzteilausfall am PC etwas übersehen.
Schaltung der LED´s und Code "an/aus" entsprechen der RN-Control. Aber die LED geht bei mir sofort an und mit "setportbon(2)" aus - und danach kommt das "Hallo, Welt."
Code:
/* >> Diese ersten 2 Zeilen können zum Assemblieren entfernt werden (muss nicht)
Sicherung vom 28nov07, 1734 nach Datei ..C1\hello-world\he-wo_x90.asm
===================================================================================
========== Beachte: printout aus AVRStudio geht (nur) bis col 85 ==================
Target MCU : ATtiny2313
Target Hardware : Servos auf PB5 und 6, LED auf PB4
Target cpu-frequ. : 16 MHz, externer Quarzoszillator
===================================================================================
*** Versionsgeschichte:
====================
x91 28nov07 17:34 === Läuft mit 2-sec-Takt (LED), noch ohne Terminalaufruf
#####>>>>> ABER : LED geht SOFORT an, obwohl Schaltung und Code wie in
RNControl 1.4 :((
x90 24nov07 23:ff === Läuft erst nach Einbau des Quarzes
x10 23nov07 16:ff Erster Aufbau, u.a. zum Test der Flash- und Experimentier-
Platine für tiny2313 mit RS232
*** Aufgabenstellung (erweitert für x91):
Sende wiederholt "Hallo, Welt." über die RS232 UND LED auf PB2 anzünden.
Abstand der Abläufe: 2 sec LED leuchten, Textausgabe und danach 2 sec Pause.
offen: Start dann, wenn Taste 1 gedrückt, läuft durch wenn gedrückt bleibt
später: einlesen 100 ==> Programm startet mit 1sec-Takt, evtl. Erweiterung
einlesen 200 ==> startet mit 2 sek-Takt; Einlesen über Terminal
Autor: JWT
Läuft, ABER erst mit Quarz. Hilfe von Hubert.G und robocat
Portbelegung, Schaltung auszugsweise
VAP = LED an, wenn ddrb=1 + portb=0
Vcc ---------+-----t2313-Vcc
| +------+ rLED|\ |
+-------------------+ 100R +----------| >+------+
| +------+ |/ | |
| t2313-PB2---------------------------------+
|
+-----------------------------------------------+
Taste1 \ |
t2313-PB4----------------+-------+ |------+
+------+ |
+-------------------+ 10 K +---+
| +------+
|
GND-----------+---------------------------------------GND
===================================================================================
*/
#include <stdlib.h>
#include <avr/io.h>
#include <avr/iotn2313.h> //<<< das is ja wohl nix
//#define MCU = attiny2313
// Mit Quarz 16 Mhz-CPU
#define F_CPU 16000000
#define BAUD 9600
#define UBRR (unsigned int)(F_CPU / BAUD / 16 - 0.5)
// ### Portinitialisierung und waitms aus RNContr Demo C
// *### Ports setzen auf HIGH/LOW ###
static inline void setportbon(const uint8_t n)
{PORTB |= (1<<n);} //set PORTB.n high
static inline void setportboff(const uint8_t n)
{PORTB &= ~(1<<n);} //set PORTB.n low
/*### Programm pausieren lassen ###*/
/*Pausenwert ist nur experimentell !*/
void waitms(uint16_t ms)
{
for(; ms>0; ms--)
{
uint16_t __c = 4000;
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__c)
: "0" (__c)
);
}
}
// ------------------------------------------------------------------
// Dieser Codeschnipsel ähnlich 2313-doc, S 121
void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (3<<UCSZ0);
}
// ------------------------------------------------------------------
void sendchar(unsigned char c)
{
while(!(UCSRA & (1<<UDRE))) //Warten, bis Senden möglich ist
{
}
UDR = c; //schreibt das Zeichen aus 'c' auf die Schnittstelle
}
// ------------------------------------------------------------------
void sendUSART(char *s) //*s funktiniert wie eine Art Array - auch bei
// einem String werden die Zeichen (char)
// einzeln ausgelesen - und auf die
// Sendeschnittstelle übertragen
{
while(*s)
{
sendchar(*s);
s++;
}
}
// ------------------------------------------------------------------
/*### Hauptschleife ###*/
int main(void)
{
USART_Init(UBRR); //USART initialisieren
DDRB=0xff;
PORTB=0;
// for(uint8_t i=0; i<10; i++)
for(;;){
setportboff(2);
waitms(2000);
setportbon(2);
/*###Text senden###*/
sendUSART("\r\n\n\n"); //Sendet Kennung und Text.
// "\r" setze Cursor auf Zeilenanfang,
// "\n" beginnt dann die nächste Zeile
sendUSART("**** ATtiny2313 *****\r\n");
sendUSART(" \r\n");
sendUSART("Hallo, Welt.\r\n");
sendUSART(" \r\n");
waitms(2000);
}
}
Und ich komm wirklich nicht darauf, was daran falsch sein sollte. Vielleicht könnte mal jemand bitte drüber gucken?
Danke.
Lesezeichen