RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBO burger Burger Fuses und Brown Out

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7432 private projects
  • 378 public projects
  • 16179195 lines compiled
  • 58194 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA: Burger Fuses und Brown Out

Burger Fuses und Brown Out 8 Jahre 3 Monate her #3486

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Die Original Fuses bei meinem Nibo Burger stehen auf hfuse = D1, lfuse = EF

Die Bedeutung der Einstellung lässt sich hier prima recherchieren -> www.engbedded.com/fusecalc/

:help: Warum ist die "BrownOut Detection" abgeschaltet?

ich würde die lfuse gerne auf AF oder 2F umprogrammieren spricht etwas dagegen


Ich programmiere mir gerade eine Terminal Konsole "Nibo Burger Control Cockpit" und stecke dabei etwas länger im Atmel Studio fest, ohne den noch eingeschalteten Nibo Burger im Auge zu behalten (der steht neben dem Rechner und seine LEDs blinkern so vor sich hin); wenn ich dann die neue Funktion auf den Burger spielen will, zeigt mir die Statuszeile im Terminal plötzlich "Akku = 2040mV" :sick:

Also Burger ausgeschaltet und meinen Spezialjumper ( siehe www.roboter.cc/index.php?option=com_kunena&view=topic&catid=19&id=2460&Itemid=20#3255) von RUN auf CHARGE umgesteckt.
Aber jetzt blitzt mit'mal die LED7 im 2 Sekunden Takt.. :kopfkratz:
Jumper wieder in RUN Position .. auf CHARGE .. abgezogen - dabei jedesmal Burger EIN .. Burger AUS -- LED7 blitzt weiter :woohoo:

USB Stecker abgezogen, Jumper in CHARGE Position, USB Stecker wieder angesteckt - und LED7 leuchtet mit kurzen Unterbrechungen :huh:

..ich werde dann mal eine "Beep"-Ausgabe in meiner Statuszeile ergänzen..nur bis zum Testen wird's halt wieder dauern..

Eigentlich könnte der Nibo Burger doch bei angestöpseltem USB weiter mit Spannung versorgt werden, wenn er laut Wiki FAQ nur 200mA bei 100% PWM ziehen soll :kopfkratz: Oder spricht da etwas gegen?
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Burger Fuses und Brown Out 8 Jahre 3 Monate her #3500

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Hallo BirgerT,

ich denke es spricht nix dagegen die BrownOut-Detection einzuschalten - das sollte funktionieren! Der Burger wird jedoch im Gegensatz zum NIBObee mit einer etwas verringerten Spannung betrieben, Du solltest mit ca. 4 Volt rechnen. Die sind jedoch zusätzlich stabilisiert (100nF) und können von den Motoren nicht so stark gestört werden... Mit den 4 Volt sind nach dem Datenblatt sowohl 15 MHz, wie auch 3.3V und 5V IOs möglich... Eine Art Eierlegendewollmichsau!!!

Verwendest Du das mitgelieferte USB Kabel? Die günstigen USB Kabel haben in der Regel einen zu dünnen Querschnitt in den Leitungen und der ATtiny ist recht anspruchsvoll in der Signalqualität.

Für die Versorgung über USB kannst Du Dir auf der Oberen Platine an dem 5 poligen Steckplatz unter dem Batteriehalter an geeigneter Stelle ;) eine Schottky Diode einlöten! Natürlich auf eigene Gefahr! :woohoo:

-workwind-
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Burger Fuses und Brown Out 8 Jahre 3 Monate her #3528

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Kurzer Lagebericht:
- Brown Out Detection aktiviert, aber ob mit BODLEVEL 4,0 (lfuse = 2F) oder mit BODLEVEL 2,7V (lfuse = AF) - beim Start (Einschalten) ist (MCUCSR & (1<<BORF)) immer TRUE.. :kopfkratz:
- Latürnich wird das mitgelieferte USB Kabel verwendet - SCNR: - Aber wo auf dem Nibo Burger ist ein Batteriehalter ?:blink:

- Ja ich habe die X14 unter dem Akkuhalter gefunden:
Habe dort eine abgewinkelte Stiftleiste* eingelötet, und.. keine Lust zum Tippen -> geht Bilder gucken



*Stiftleiste verwenden, wenn man die Anschlüsse nach aussen führen will. Für Buchsenleiste und Bread Board Jumper Wire scheint nicht genügend Platz (Getriebe) zu sein.

Tatsächliche Ausführung
- Jumper Wire female/female zwischen X14:1 und J3:1
++ die Batterie Versorgung ist von VCC getrennt (J3:2 ist offen), und der Burger kann mit S1 normal ein- und ausgeschaltet werden.
--- Nach dem Aus- und Einschalten funktioniert der der UpLoad mit RoboDude nimmer..
Ich muss bei eingeschaltetem Burger erst den USB Stecker abziehen und wieder einstecken :unsure:

Wenn J1,2,3 in Charge stecken (Versorgung V.USB an J3:1), wird beim Ausschalten des Burgers automatisch die Akkuladung aktiviert.

..und noch eins.. Der Wert von "nibo_getMillivolt()" ist (Akkuspannung abzgl. Spannungsabfall über der Diode D1)
und für die Messung ist kein separater Analogeingang verwendet worden - schade, dass in der Doku nicht beschrieben ist, wie's gemacht wird.. :)
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Burger Fuses und Brown Out 8 Jahre 3 Monate her #3530

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Eine Batterie sind nur mehrere Zellen ;-) Also ist ein Batteriehalter ein Halter für mehrere Zellen...
In der englischen Sprache ist das mit "rechargeable batteries" für Akkus grammatikalisch eindeutig besser gelöst :woohoo:

Zurück zum Thema:
(MCUCSR & (1<<BORF)) sollte eigentlich 0 sein, wenn Du den Roboter frisch eingeschaltet hast! Bist Du Dir sicher?? :kopfkratz:
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Burger Fuses und Brown Out 8 Jahre 3 Monate her #3533

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Hi workwind,

das mit dem "Batterie"halter sollte doch nur eine Anspielung auf die Doku sein.. und bevor jemand auf die Idee kommt, tatsächlich Batterien zu verwenden.

BTW. Wenn das Akkuladen frisch beendet wurde, bekomme ich von nibo_getMillivolt() einen Wert um die 5200..

Zur Abfrage von BORF (wenn Du mal schauen magst) hier meine main()
//
//////////////////////////////////////////////////////////////////////////
//
//													M A I N - S E T U P
//
int main() {
 
	led_init();				// Set GPIO DDR for LEDs
	//
	//
#if 0
	// Brown Out Reset Flag scheint immer gesetzt zu sein
	if (MCUCSR & (1<<BORF)) {
	//if (1==1) {
		uint8_t i,k;
		// Reset nach Brown Out Detected
		while (1==1) {
			for (k = 3; k>0;--k) {
				for (i = 3; i>0;--i) {
					led_set(1,1);
					if (k == 2) { delay(250); } 
					else { delay(100); }
					led_set(1,0);
					if (k == 2) { delay(250); } 
					else { delay(400); }
				}
			} // for k			
			delay(10000);
		} // while		
	} // if BORF
#endif	

	uart_init(9600);		// BirgerT activate UART Kommunikation
	//usart_setbaudrate(38400); // niborobolib kommunikation
	//usart_enable();
 
	motpwm_init();			// 
	motpid_init();			//
	odometry_init();		//
	analog_init();			//
	sei();
	surface_init();			//
 
	// ?
	for (uint8_t i = 0; i<8; i++) {
		analog_setExtToggleMode(i, 0);
	}
 
	// Startup Waittime für XBEE nach dem Einschalten 
	delay(2000);
 
#if 1
	// Erste Begrüßung
	uart_txd_strP(str_hello);
	uart_txd_char('\n');
//	delay(2000);
	delay(400);
#endif

	uart_txd_strP(str_clearscr);
 
	#define LED2_INTERVAL 200
	#define LED3_INTERVAL 205
	uint16_t led2_interval = LED2_INTERVAL;
	uint16_t led3_interval = LED3_INTERVAL;
 
	#define CHAR_SEND_INTERVAL 800
	uint16_t char_interval = CHAR_SEND_INTERVAL;
 
 
	uint8_t rxdmerker = 20;
 
//
//
//////////////////////////////////////////////////////////////////////////
//
//														M A I N - L O O P
//
	while(1==1) {
		// sei(); // is done within clock_elapsed_ms
		//
		//	Laufzeit der Main_Loop:
		//	Aus der Variablen "clock_ms" ermittelte Zeitdifferenz entspricht
		//	der Laufzeit (Ausführungsdauer) der Hauptschleife.
		//
		loop_duration = clock_elapsed_ms();
		if (loop_duration > loop_duration_max) {
			loop_duration_max = loop_duration;
		}
		loop_duration_avg += loop_duration;
		loop_duration_avg /= 2;
		//
		//
		if (analog_has_update()) {
			//nibo_assertMinVoltage(NIBO_ASSERT_VOLTAGE(4000));
			//nibo_checkMonitorVoltage();
		}
		//
		//	UART Terminal Aktivität erkennen
		//
		static	uint8_t terminal = 0;
		uart_login("  ", &terminal);
//		uart_login("top", &terminal);
 
 
		//
		//  Von der Timervariablen "status_interval" wird die Laufzeit der 
		//	Hauptschleife abgezogen (in "clock_get_event()"). 
		//  Ist der Inhalt der Timervariablen <= der Laufzeit, ist die 
		//	Wartezeit um; die Timervariable wird neu "aufgeladen" und die 
		//	zum Zeitpunkt fällige Aktion ausgeführt (Update der Statuszeile)
		//
		//	Statuszeile Update
		//
 
		if (!(status_interval = clock_get_event(status_interval,loop_duration))) {
			status_interval = STATUSZEILE_INTERVAL;
			if (terminal == RX_ACTIV) {
				statuszeile();
			}
			else {
				uart_txd_strP("\x1b[12;20H"	// Cursor Position
				"Zum Aktivieren des Menus 2 x Leertaste"
				);
			}
		}
 
 
//		analog_wait_update(); // Zeitverzögerung Testen
//		delay(5);
 
 
		//
		/////////////////////////////////////////////////////////////////
		//
		//												T E S T C A L L S
		#ifdef TEST_MENU_H_
		//
		if (terminal == RX_ACTIV) {
			test_menu(0);
 
//	eventuell den status_intervall in stauszeile() verlegen
//			statuszeile();
 
		}
		//
		#endif // TEST_MENU_H_
		//
 
 
 
#if 1
		// Blinken alte Version vor Entstehung clock_get_event()
		if (led2_interval > loop_duration) {
			led2_interval -= loop_duration;
		}
		else {
			led2_interval = LED2_INTERVAL;
			if (led_get(2) != 0) {
				led_set(2,0);
			} 
			else {
				led_set(2,1);
			}
 
		} // led2_interval
 
		if (led3_interval > loop_duration) {
			led3_interval -= loop_duration;
		}
		else {
			led3_interval = LED3_INTERVAL;
			if (led_get(3) != 0) {
				led_set(3,0);
				//led_set(1,0);
			} 
			else {
				led_set(3,1);
				//led_set(1,1);
			}
 
		} // led3_interval
#endif		
		
 
//////////////////////////////////////////////////////////////////////////
	} // while(1==1)	
	return 0;
} // main()

und weil wir gerade dabei sind - ich hätte hier noch zwei Funktionen zur Erweiterung der clock.c/h in der Niborobolib (damit das endlich mit dem delay() aufhört :dry: )
//////////////////////////////////////////////////////////////////////////
//
//	CLOCK2	Ergänzende Routinen zur clock.h/.c der niborobolib 3.3
//
//	(c) Birger Töpelmann	toepelmann(A)web.de  Version 160102a
//
////////////////////////////////////////////////////////////////////////////
//
/*  BSD-License:
 
Copyright (c) 2015 by Birger Töpelmann, contact BirgerT at roboter.cc, Germany
 
Modified programs to run the NIBO Burger Robot Kit by nicai-systems, 
 
based on and partially taken from the original niborobolib
Copyright (c) by Nils Springob, nicai-systems, Germany
 
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
  * Redistributions of source code must retain the above copyright notice,
    this list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution.
  * Neither the name nicai-systems nor the names of its contributors may be
    used to endorse or promote products derived from this software without
    specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
*/
//
 
 
#ifndef CLOCK2_H_
#define CLOCK2_H_

#include <niboburger/iodefs.h>
#include "avr_util.h"		// ein paar zusätzliche Helper von BirgerT
#include <niboburger/clock.h>

 
#ifdef __cplusplus
extern "C" {
#endif
//
/////////////////////////////////////////////////////////////////////////
//
//extern	uint16_t	clock_loop_duration;
//
/////////////////////////////////////////////////////////////////////////
//
//		Liefert die Zeit 0..999ms, die seit dem letzten Aufruf der 
//		Funktion vergangen ist. Wird diese Funktion einmal zu Beginn
//		der main_loop aufgerufen (direkt hinter dem "while(1=1)), 
//		entspricht das Ergebnis der letzen Laufzeit der Hauptschleife.
//		 
//
	uint16_t clock_elapsed_ms();
//
//
/////////////////////////////////////////////////////////////////////////
//
//		Vergleichsfunktion liefert die Zeit (basetime - subtime) oder 0,
//		wenn subtime >= basetime war. Mit dieser Funktion können 
//		"Eieruhren" für zeitgesteuerte Aktionen realisiert werden.
//	
//		#define		LED1_OFF_TIME 400;
//		#define		LED1_ON_TIME 50;
//	
//		uint16_t led1_time = LED1_OFF_TIME;
//		:
//		// Dauer des letzten Schleifendurchlaufs
//		loop_duration = clock_elapsed_ms();
//		:
//		if (led1_time = clock_get_event(led1_time, loop_duration) == 0) {
//		// die Eieruhr ist abgelaufen
//			if (led_get(LED_1)) {
//				// LED leuchtet bereits -> abschalten
//				led_set(LED_1, 0);
//				// Aus-Zeit setzen
//				led1_time = LED1_OFF_TIME;	
//			} 
//			else {
//				// LED ist aus -> einschalten
//				led_set(LED_1, 0);
//				// Ein-Zeit setzen
//				led1_time = LED1_ON_TIME;	
//			} // if led_get
//		} // if clock_get_event
//
//
	uint16_t clock_get_event(uint16_t basetime, uint16_t subtime);
//
 
//
/////////////////////////////////////////////////////////////////////////
//
#ifdef __cplusplus
} // extern "C"
#endif
//
#endif /* CLOCK2_H_ */
//////////////////////////////////////////////////////////////////////////
//
//	CLOCK2	Ergänzende Routinen zur clock.h/.c der niborobolib 3.3
//
//	(c) Birger Töpelmann	toepelmann(A)web.de  Version 160102a
//
////////////////////////////////////////////////////////////////////////////
//
/*  BSD-License:
 
Copyright (c) 2015 by Birger Töpelmann, contact BirgerT at roboter.cc, Germany
 
Modified programs to run the NIBO Burger Robot Kit by nicai-systems, 
 
based on and partially taken from the original niborobolib
Copyright (c) by Nils Springob, nicai-systems, Germany
 
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
  * Redistributions of source code must retain the above copyright notice,
    this list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution.
  * Neither the name nicai-systems nor the names of its contributors may be
    used to endorse or promote products derived from this software without
    specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
*/
//
 
#include "clock2.h"

//
/////////////////////////////////////////////////////////////////////////
//
//		Liefert die Zeit 0..999ms, die seit dem letzten Aufruf der 
//		Funktion vergangen ist. Wird diese Funktion einmal zu Beginn
//		der main_loop aufgerufen (direkt hinter dem "while(1=1)), 
//		entspricht das Ergebnis der letzen Laufzeit der Hauptschleife.
//		 
//
uint16_t clock_elapsed_ms(){
 
	static uint16_t clock_last_read = 0;
	uint16_t tmp_time = clock_last_read;
 
	cli();
	// ATOMIC Read
	clock_last_read = clock_ms;
	// Clock funktioniert sowieso nur mit sei()
	sei();
	// Zeitdifferenz mit 1000er Überlauf berechnen
	if (tmp_time > clock_last_read) {
		// clock_ms zählt nur bis 1000 (oder 999 ?!)
		return 1000 - tmp_time + clock_last_read;
	} 
	else {
		return clock_last_read - tmp_time;
	}
} // clock_elapsed_ms
//
/////////////////////////////////////////////////////////////////////////
//
//		Vergleichsfunktion liefert die Zeit (basetime - subtime) oder 0,
//		wenn subtime >= basetime war. Mit dieser Funktion können 
//		"Eieruhren" für zeitgesteuerte Aktionen realisiert werden.
//	
//		#define		LED1_OFF_TIME 400;
//		#define		LED1_ON_TIME 50;
//	
//		uint16_t led1_time = LED1_OFF_TIME;
//		:
//		// Dauer des letzten Schleifendurchlaufs
//		loop_duration = clock_elapsed_ms();
//		:
//		if (led1_time = clock_get_event(led1_time, loop_duration) == 0) {
//		// die Eieruhr ist abgelaufen
//			if (led_get(LED_1)) {
//				// LED leuchtet bereits -> abschalten
//				led_set(LED_1, 0);
//				// Aus-Zeit setzen
//				led1_time = LED1_OFF_TIME;	
//			} 
//			else {
//				// LED ist aus -> einschalten
//				led_set(LED_1, 0);
//				// Ein-Zeit setzen
//				led1_time = LED1_ON_TIME;	
//			} // if led_get
//		} // if clock_get_event
//
//
uint16_t clock_get_event(uint16_t basetime, uint16_t subtime) {
 
		if (basetime > subtime) {
			return (basetime - subtime);
		} 
		else {
			return 0;
		}
	} // clock_get_event
//

/lg BirgerT
Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
Ladezeit der Seite: 0.160 Sekunden

Werbung